home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 34.zip / BS1 part 34 / FredFish PD 305.adf / Fenster / FensterV2.1.s < prev    next >
Text File  |  1990-01-17  |  52KB  |  2,682 lines

  1. *
  2. *   FENSTER V2.1    / 16.December.1989 
  3. *
  4. *   by Roger Fischlin, Steigerwaldweg 6, D-6450 Hanau 7, West Germany
  5. *      Phone. (06181) 650266
  6. *
  7. *
  8. *   FENSTER v2.1 is public domain software - So you are only allowed
  9. *   to use this code for non-commercial purposes.
  10. *
  11. *   
  12. *
  13.  
  14.  
  15.     incdir       "fh1:include/"
  16.  
  17.     include    intuition/intuition.i
  18.     include    intuition/intuition_lib.i
  19.             include     exec/memory.i
  20.     include    exec/exec_lib.i
  21.     include    graphics/graphics_lib.i
  22.     include    graphics/text.i
  23.     include    libraries/dos_lib.i
  24.     include    libraries/dos.i
  25.     include    devices/printer.i
  26.  
  27.  
  28.  
  29. FontFlag    set    0
  30.  
  31. SETAPEN    macro
  32.     move.l    WindowPointer,a1
  33.     move.l    wd_RPort(a1),a1    
  34.     move.l    \1,d0
  35.     CALLGRAF    SetAPen
  36.     endm
  37.  
  38. SETBPEN    macro
  39.     move.l    WindowPointer,a1
  40.     move.l    wd_RPort(a1),a1    
  41.     move.l    \1,d0
  42.     CALLGRAF    SetBPen
  43.     endm
  44. SETDRMD    macro
  45.      move.l    WindowPointer,a1
  46.     move.l    wd_RPort(a1),a1    
  47.     move.l    \1,d0
  48.     CALLGRAF    SetDrMd
  49.     endm
  50.  
  51. RECTFILL    macro
  52.     move.l    WindowPointer,a1
  53.     move.l    wd_RPort(a1),a1    
  54.     move.l    \1,d0
  55.     move.l    \2,d1
  56.     move.l    \3,d2
  57.     move.l    \4,d3
  58.     CALLGRAF    RectFill
  59.     endm
  60.  
  61. BORDER    macro
  62.     bra.s    MakeBox_\@
  63. MakeBox2_\@    BOX    \1,\2,\3,\4,\5,0
  64. MakeBox_\@    move.l    WindowPointer,a0
  65.     move.l    wd_RPort(a0),a0
  66.     lea.l    MakeBox2_\@(pc),a1
  67.     moveq.l    #0,d0
  68.     moveq.l    #0,d1
  69.     CALLINT    DrawBorder
  70.     endm
  71.  
  72. WRITE    macro
  73.     move.l    WindowPointer,a1
  74.     move.l    wd_RPort(a1),a1
  75.     move.l    a1,a3    
  76.     move.l    \1,d0
  77.     move.l    \2,d1
  78.     CALLGRAF    Move
  79.     move.l    a3,a1    
  80.     move.l    \3,d0
  81.     CALLGRAF    SetAPen
  82.     lea.l    Write_Text\@(pc),a0
  83.     move.l    a3,a1
  84.     move.l    #Write_Ende\@-Write_Text\@,d0
  85.     CALLGRAF    Text
  86.     bra    Write_Label\@
  87. Write_Text\@    dc.b    \4
  88. Write_Ende\@    dc.b    0
  89.     even
  90. Write_Label\@    nop
  91.     endm
  92.  
  93.  
  94.  
  95. BOX    macro            ; macro to create a border structure
  96.     dc.w    0,0
  97.     dc.b    \5,0,RP_JAM1,5
  98.     dc.l    box_\@,\6
  99. box_\@    dc.w    \1,\2,\3,\2,\3,\4,\1,\4,\1,\2
  100.     endm
  101.  
  102. TEXT    macro            ; macro to create a text structure    
  103.     dc.b    2,0,RP_JAM1,0
  104.     dc.w    \1+1,\2+1
  105.     dc.l    TOPAZ_80,T_String\@,Text2_\@
  106. Text2_\@    dc.b    \3,0,RP_JAM1,0
  107.     dc.w    \1,\2
  108.     dc.l    TOPAZ_80,T_String\@,0
  109. T_String\@    dc.b    \4,0
  110.     even
  111.  
  112.  
  113.     IFEQ    FontFlag
  114.  
  115. TOPAZ_80    dc.l    T_80name
  116.     dc.w    TOPAZ_EIGHTY
  117.     dc.b    FS_NORMAL,FPF_ROMFONT
  118.     even
  119. T_80name    dc.b    "topaz.font",0
  120.  
  121. FontFlag    set    1
  122.     endc
  123.     endm
  124.  
  125.  
  126. AUTOGADGET    macro
  127. * \1,\2    x,y
  128. * \3,\4    size
  129. * \5,\6    colors (text & Box)
  130. * \7       Text
  131. * \8       ID
  132. * \9       NextGadget
  133.  
  134.     dc.l    \9
  135.     dc.w    \1,\2,\3,\4
  136.     dc.w    GADGHCOMP,RELVERIFY,BOOLGADGET
  137.     dc.l    AGadget\@_Box
  138.     dc.l    0,AGadget\@_Text,0,0
  139.     dc.w    \8,0,0
  140. AGadget\@_Box    BOX    -1,-1,\3,\4,\5,0
  141.     even
  142.  
  143. AG_T_String\@    dc.b    \7,0
  144. AG_T_String\@_End    
  145.     even
  146. AGadget\@_Text    dc.b    2,0,RP_JAM1,0
  147.     dc.w    (\3-(AG_T_String\@_End-AG_T_String\@-1)*8)/2+1,((\4-8)/2)+1
  148.     dc.l    TOPAZ_80,AG_T_String\@,AG_Text2_\@
  149.  
  150. AG_Text2_\@    dc.b    \6,0,RP_JAM1,0
  151.     dc.w    (\3-(AG_T_String\@_End-AG_T_String\@-1)*8)/2),(\4-8)/2
  152.     dc.l    TOPAZ_80,AG_T_String\@,0
  153.  
  154.     
  155.     IFEQ    FontFlag
  156.  
  157. TOPAZ_80    dc.l    T_80name
  158.     dc.w    TOPAZ_EIGHTY
  159.     dc.b    FS_NORMAL,FPF_ROMFONT
  160.     even
  161. T_80name    dc.b    "topaz.font",0
  162.  
  163. FontFlag    set    1
  164.     endc
  165.     endm
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.     include    "misc/easystart.i"
  173.     
  174.     jsr    OpenThem
  175.     move.l    _ARPBase,a1    
  176.     cmp.l    #0,a1
  177.     beq.s    .L1
  178.     CALLEXEC    CloseLibrary
  179. .L1    move.l    _ColorBase,a1    
  180.     cmp.l    #0,a1
  181.     beq.s    .L2
  182.     CALLEXEC    CloseLibrary
  183. .L2    rts    
  184.  
  185.  
  186. OpenThem    lea    dosname(pc),a1        ; open libs
  187.     moveq.l    #0,d0
  188.     CALLEXEC     OpenLibrary
  189.     move.l    d0,_DOSBase    
  190.     lea    intname(pc),a1                 
  191.     moveq.l    #0,d0        
  192.     CALLEXEC     OpenLibrary
  193.     move.l    d0,_IntuitionBase  
  194.     lea    grafname(pc),a1
  195.     moveq.l    #0,d0
  196.     CALLEXEC     OpenLibrary
  197.     move.l    d0,_GfxBase
  198.     lea    colorname(pc),a1
  199.     moveq.l    #0,d0
  200.     CALLEXEC     OpenLibrary
  201.     move.l    d0,_ColorBase
  202.     tst.l    d0
  203.     bne.s    .L1
  204.     or.w    #GADGDISABLED,GadgetV2_33+gg_Flags
  205. .L1    lea    arpname(pc),a1
  206.     moveq.l    #0,d0
  207.     CALLEXEC     OpenLibrary
  208.     move.l    d0,_ARPBase
  209.     tst.l    d0
  210.     bne    Init
  211.     move.l    #RECOVERY_ALERT,d0    ; error message
  212.     move.l    #30,d1
  213.     lea.l    NoARPText,a0
  214.     CALLINT    DisplayAlert
  215.     moveq.l    #0,d0
  216.     rts
  217. NoARPText    dc.w    60
  218.     dc.b    17
  219.     dc.b    "FENSTER  :   ERROR !?!    I cannot open the ARP LIBRARY !"
  220.     dc.b     0,0
  221.  
  222.     rts
  223.  
  224. _DOSBase    dc.l    0
  225. dosname    DOSNAME
  226. _GfxBase    dc.l    0
  227. grafname    GRAFNAME
  228. _IntuitionBase    dc.l    0
  229. intname    INTNAME
  230. arpname    dc.b    "arp.library",0
  231.     even
  232. _ARPBase    dc.l    0
  233. colorname    dc.b    "color.library",0
  234.     even
  235. _ColorBase    dc.l    0
  236.  
  237. CloseThem    move.l    _ARPBase,a1    
  238.     cmp.l    #0,a1
  239.     beq.s    .L1
  240.     CALLEXEC    CloseLibrary
  241. .L1    move.l    _ColorBase,a1    
  242.     cmp.l    #0,a1
  243.     beq.s    .L2
  244.     CALLEXEC    CloseLibrary
  245. .L2    rts    
  246.  
  247. Window1    dc.l    0
  248. Palette    dc.w    $443,$eee,$002,$f80
  249.  
  250. Start    lea.l    Screendef,a0        ; open Screen
  251.     CALLINT    OpenScreen
  252.     tst.l    d0
  253.     beq    ende
  254.     move.l    d0,ScreenPtr1
  255.  
  256.     move.l    d0,a0        ; set colours
  257.     lea.l    sc_ViewPort(a0),a0
  258.     moveq.l    #4,d0
  259.     lea.l    Palette,a1
  260.     CALLGRAF    LoadRGB4
  261.     CALLINT    RemakeDisplay
  262.  
  263.  
  264.     lea.l    Windowdef1,a0        ; open window    
  265.     CALLINT    OpenWindow
  266.     tst.l    d0
  267.     beq    QUIT2
  268.     move.l    d0,Window1
  269.  
  270.     
  271. WindowPointer set Window1        ;define Window1 as WindowPointer (for macros )
  272.  
  273.  
  274.     SETDRMD    #RP_JAM1
  275.     
  276.  
  277. ChangeScreen    SETAPEN    #0
  278.     RECTFILL    #10+184,#10,#270+184,#165
  279.  
  280.     clr.l    Mode        ; mode = select Screen
  281.     jsr    ShowScreen        ; Select Screen
  282.  
  283.     lea.l    Gadget1,a0        
  284.     move.l    Window1,a1
  285.     sub.l    a2,a2
  286.     CALLINT    RefreshGadgets
  287.  
  288.  
  289.  
  290. wait    move.l    Window1,a0        ; wait .....
  291.     move.l    wd_UserPort(a0),a0
  292.     move.l    a0,a5
  293.     CALLEXEC    WaitPort        
  294.     move.l    a5,a0
  295.     CALLEXEC    GetMsg        ; get message
  296.     move.l    d0,a1    
  297.     move.l    im_Class(a1),d4    ; get data
  298.     move.w    im_Code(a1),d5
  299.     move.l    im_IAddress(a1),a4
  300.     moveq.l    #0,d6
  301.     move.w    im_MouseY(a1),d6
  302.     CALLEXEC     ReplyMsg        ; reply message        
  303.     cmp.l    #MENUPICK,d4
  304.     beq    QUIT
  305.     cmp.l    #VANILLAKEY,d4
  306.     beq    KEY
  307.  
  308.     moveq.l    #0,d0        ; use table to get subroutine        
  309.     move.w    gg_GadgetID(a4),d0
  310.     subq    #1,d0
  311.     lsl.l    #2,d0
  312.     lea.l    Vektoren,a0
  313.     tst.l    Mode
  314.     bne    modus2    
  315.     lea.l    VektorenScreen,a0
  316. modus2    move.l    (a0,d0),a0
  317.     jmp    (a0)
  318. Vektoren    dc.l    ChangeScreen,GetWindows,KillWindow,FRONT,BACK    ; 1
  319.     dc.l    CLEAR,FRAME,ALL,REFRESH,IDCMP            ; 6
  320.     dc.l    ABOUT,NewLimits,NewLimits,NewLimits,NewLimits    ; 11
  321.     dc.l    NewPen,MoveWindow,MoveWindow,SizeWindow,SizeWindow    ; 16
  322.     dc.l    NewPen,WindowSelect,PrintWindow,SaveWindow,ALL    ; 21
  323.     dc.l    wait,ScreenFRONT,ScreenBACK,SaveScreen,PrintScreen    ; 26
  324.     dc.l    ADD,SUB,ColReq,TOP,wait            ; 31
  325.     dc.l    wait,wait,wait,wait,wait
  326.  
  327. VektorenScreen    dc.l    ChangeScreen,ChangeScreen,Error,Error,Error
  328.     dc.l    Error,Error,Error,Error,Error
  329.     dc.l    ABOUT,Error,Error,Error,Error
  330.     dc.l    Error,Error,Error,Error,Error
  331.     dc.l    Error,ScreenSelect,wait,wait
  332.     dc.l    Error,Error,Error,Error,Error
  333.     dc.l    Error,Error,Error,Error,Error
  334.     dc.l    Error,Error,Error,Error,Error
  335.     
  336. Error    move.l    ScreenPtr1,a0
  337.     CALLINT    DisplayBeep
  338.     bra    wait
  339.  
  340.  
  341.     
  342. QUIT    move.l    Window1,a0        ; bye, bye !
  343.     CALLINT    CloseWindow
  344.  
  345.     move.l    ScreenPtr1,a0
  346.     CALLINT    CloseScreen
  347.  
  348.     moveq.l    #0,d0
  349.     rts
  350.  
  351. KEY    cmp.b    #"f",d5        ; useful key pressed ?
  352.     beq    KEY2
  353.     cmp.b    #"s",d5
  354.     bne    KEY3
  355.     tst.l    Mode
  356.     beq    wait
  357.  
  358.     move.l    BILDSCHIRM,a0
  359.     CALLINT    ScreenToFront
  360.     bra    wait
  361.  
  362. KEY2    move.l    ScreenPtr1,a0
  363.     CALLINT    ScreenToFront
  364.     bra    wait
  365.  
  366. KEY3    cmp.b    #"u",d5
  367.     beq    UP
  368.     cmp.b    #"d",d5
  369.     bne    wait
  370.     move.l    Top,d0    ; move down
  371.     add.l    #17,d0
  372.     cmp.l    Anzahl,d0
  373.     bge    wait
  374.     add.l    #1,Top
  375.     bra    ShowWindow
  376.  
  377.  
  378. UP    tst.l    Top    ; move up
  379.     beq    wait
  380.     sub.l    #1,Top
  381.     bra    ShowWindow
  382.     
  383.     
  384.  
  385.  
  386. Mode    dc.l    0
  387.  
  388.  
  389. Screendef    dc.w    0,0,640,199,2
  390.     dc.b    0,1
  391.     dc.w    V_HIRES
  392.     dc.w    CUSTOMSCREEN
  393.     dc.l    TOPAZ_80
  394.     dc.l    S_Title,0,0
  395.     
  396.  
  397. Windowdef1    dc.w    0,0,640,199
  398.     dc.b    -1,-1
  399.     dc.l    GADGETUP!MENUPICK!VANILLAKEY
  400.     dc.l    WINDOWDRAG!WINDOWCLOSE!ACTIVATE!SMART_REFRESH!BACKDROP
  401.     dc.l    GadgetV2_1
  402.     dc.l    0
  403.     dc.l    0
  404. ScreenPtr1    dc.l    0,0
  405.     dc.w    0,0,0,0,CUSTOMSCREEN
  406. S_Title    dc.b    "RF-Tools : FENSTER V2.1 by Roger Fischlin 12/1989            ",0
  407.     even
  408.  
  409. Gadget1    AUTOGADGET     10,13+0*14,165,10,3,1,<"Show Screens">,1,Gadget2
  410.     even
  411. Gadget2    AUTOGADGET     10,13+1*14,165,10,3,1,<"Update List">,2,Gadget3
  412.     even
  413. Gadget3    AUTOGADGET     280+184,13+2*14,165,10,3,1,<"Close Window">,3,Gadget4
  414.     even
  415. Gadget4    AUTOGADGET     280+184,13+3*14,165,10,3,1,<"Window To Front">,4,Gadget5
  416.     even
  417. Gadget5    AUTOGADGET     280+184,13+4*14,165,10,3,1,<"Window To Back">,5,Gadget6
  418.     even
  419. Gadget6    AUTOGADGET     280+184,13+5*14,165,10,3,1,<"Clear Pointer">,6,Gadget7
  420.     even
  421. Gadget7    AUTOGADGET     280+184,13+6*14,165,10,3,1,<"Redraw Frame">,7,Gadget9
  422.     even
  423. Gadget9    AUTOGADGET     280+184,13+7*14,165,10,3,1,<"Refresh Gadgets">,9,Gadget10
  424.     even
  425. Gadget10    AUTOGADGET     280+184,13+8*14,165,10,3,1,<"Modify IDCMP">,10,Gadget11
  426.     even
  427. Gadget11    AUTOGADGET     280+184,13+9*14+7,165,10,1,3,<"About Fenster">,11,Gadget12
  428.     even
  429.  
  430.  
  431.  
  432. Gadget12    dc.l    Gadget13
  433.     dc.w    55+184,185+3,41,12
  434.     dc.w    GADGHCOMP,RELVERIFY!LONGINT,STRGADGET
  435.     dc.l    G12_box
  436.     dc.l    0,G12_Text,0,G12_Info
  437.     dc.w    12,0,0
  438. G12_box    BOX    -5,-4,36,12,1,G12_Box2
  439.     even
  440. G12_Box2    BOX    -5,-4,-55,12,1,0
  441.     even
  442. G12_Text    TEXT    -50,0,3,<"min.X">
  443.     even
  444. G12_Info    dc.l    G12_Puffer,G12_Undo
  445.     dc.w    0,4
  446.     ds.b    si_SIZEOF
  447. G12_Puffer    ds.b    6
  448. G12_Undo    ds.b    6
  449.  
  450. Gadget13    dc.l    Gadget14
  451.     dc.w    5*8+150-45+1+184,185+3,41,12
  452.     dc.w    GADGHCOMP,RELVERIFY!LONGINT,STRGADGET
  453.     dc.l    G12_box
  454.     dc.l    0,G13_Text,0,G13_Info
  455.     dc.w    13,0,0
  456.     even
  457. G13_Text    TEXT    -50,0,3,<"min.Y">
  458.     even
  459. G13_Info    dc.l    G13_Puffer,G13_Undo
  460.     dc.w    0,4
  461.     ds.b    si_SIZEOF
  462. G13_Puffer    ds.b    6
  463. G13_Undo    ds.b    6
  464.  
  465. Gadget14    dc.l    Gadget15
  466.     dc.w    5*8+250-10-45+2+184,185+3,41,12
  467.     dc.w    GADGHCOMP,RELVERIFY!LONGINT,STRGADGET
  468.     dc.l    G12_box
  469.     dc.l    0,G14_Text,0,G14_Info
  470.     dc.w    14,0,0
  471.     even
  472. G14_Text    TEXT    -50,0,3,<"max.X">
  473.     even
  474. G14_Info    dc.l    G14_Puffer,G14_Undo
  475.     dc.w    0,4
  476.     ds.b    si_SIZEOF
  477. G14_Puffer    ds.b    6
  478. G14_Undo    ds.b    6
  479.  
  480. Gadget15    dc.l    Gadget16
  481.     dc.w    5*8+350-20-45+3+184,185+3,41,12
  482.     dc.w    GADGHCOMP,RELVERIFY!LONGINT,STRGADGET
  483.     dc.l    G12_box
  484.     dc.l    0,G15_Text,0,G15_Info
  485.     dc.w    15,0,0
  486.     even
  487. G15_Text    TEXT    -53,0,3,<"max.Y">
  488.     even
  489. G15_Info    dc.l    G15_Puffer,G15_Undo
  490.     dc.w    0,4
  491.     ds.b    si_SIZEOF
  492. G15_Puffer    ds.b    6
  493. G15_Undo    ds.b    6
  494. Gadget16    dc.l    Gadget17
  495.     dc.w    5*8+450-30-45+4+184,185+3,41,12
  496.     dc.w    GADGHCOMP,RELVERIFY!LONGINT,STRGADGET
  497.     dc.l    G16_box
  498.     dc.l    0,G16_Text,0,G16_Info
  499.     dc.w    16,0,0
  500.     even
  501. G16_box    BOX    -5,-4,35,12,1,G16_Box2
  502.     even
  503. G16_Box2    BOX    -5,-4,-55,12,1,0
  504.     even
  505. G16_Text    TEXT    -50,0,3,<"BPen">
  506.     even
  507. G16_Info    dc.l    G16_Puffer,G16_Undo
  508.     dc.w    0,3
  509.     ds.b    si_SIZEOF
  510. G16_Puffer    ds.b    6
  511. G16_Undo    ds.b    6
  512.  
  513. Gadget17    dc.l    Gadget18
  514.     dc.w    55+184,185+3-16,41,12
  515.     dc.w    GADGHCOMP,RELVERIFY!LONGINT,STRGADGET
  516.     dc.l    G12_box
  517.     dc.l    0,G17_Text,0,G17_Info
  518.     dc.w    17,0,0
  519. G17_Text    TEXT    -50,0,3,<"X">
  520.     even
  521. G17_Info    dc.l    G17_Puffer,G17_Undo
  522.     dc.w    0,4
  523.     ds.b    si_SIZEOF
  524. G17_Puffer    ds.b    6
  525. G17_Undo    ds.b    6
  526.  
  527. Gadget18    dc.l    Gadget19
  528.     dc.w    5*8+150-45+1+184,185+3-16,41,12
  529.     dc.w    GADGHCOMP,RELVERIFY!LONGINT,STRGADGET
  530.     dc.l    G12_box
  531.     dc.l    0,G18_Text,0,G18_Info
  532.     dc.w    18,0,0
  533.     even
  534. G18_Text    TEXT    -50,0,3,<"Y">
  535.     even
  536. G18_Info    dc.l    G18_Puffer,G18_Undo
  537.     dc.w    0,4
  538.     ds.b    si_SIZEOF
  539. G18_Puffer    ds.b    6
  540. G18_Undo    ds.b    6
  541.  
  542. Gadget19    dc.l    Gadget20
  543.     dc.w    5*8+250-10-45+2+184,185+3-16,41,12
  544.     dc.w    GADGHCOMP,RELVERIFY!LONGINT,STRGADGET
  545.     dc.l    G12_box
  546.     dc.l    0,G19_Text,0,G19_Info
  547.     dc.w    19,0,0
  548.     even
  549. G19_Text    TEXT    -50,0,3,<"Width">
  550.     even
  551. G19_Info    dc.l    G19_Puffer,G19_Undo
  552.     dc.w    0,4
  553.     ds.b    si_SIZEOF
  554. G19_Puffer    ds.b    6
  555. G19_Undo    ds.b    6
  556.  
  557. Gadget20    dc.l    Gadget21
  558.     dc.w    5*8+350-20-45+3+184,185+3-16,41,12
  559.     dc.w    GADGHCOMP,RELVERIFY!LONGINT,STRGADGET
  560.     dc.l    G12_box
  561.     dc.l    0,G20_Text,0,G20_Info
  562.     dc.w    20,0,0
  563.     even
  564. G20_Text    TEXT    -53,0,3,<"Height">
  565.     even
  566. G20_Info    dc.l    G20_Puffer,G20_Undo
  567.     dc.w    0,4
  568.     ds.b    si_SIZEOF
  569. G20_Puffer    ds.b    6
  570. G20_Undo    ds.b    6
  571. Gadget21    dc.l    0    
  572.     dc.w    5*8+450-30-45+4+184,185+3-16,41,12
  573.     dc.w    GADGHCOMP,RELVERIFY!LONGINT,STRGADGET
  574.     dc.l    G16_box
  575.     dc.l    0,G21_Text,0,G21_Info
  576.     dc.w    21,0,0
  577.     even
  578. G21_Text    TEXT    -50,0,3,<"DPen">
  579.     even
  580. G21_Info    dc.l    G21_Puffer,G21_Undo
  581.     dc.w    0,3
  582.     ds.b    si_SIZEOF
  583. G21_Puffer    ds.b    6
  584. G21_Undo    ds.b    6
  585.     even
  586. GadgetV2_1
  587. Gadget22    dc.l    GadgetV2_23
  588.     dc.w    10+184,32-6,240+16,128+8
  589.     dc.w    GADGHNONE,RELVERIFY!LONGINT,BOOLGADGET
  590.     dc.l    0
  591.     dc.l    0,0,0,0
  592.     dc.w    22,0,0
  593.     even
  594.  
  595.  
  596. GadgetV2_23    AUTOGADGET     280+184,13+0*14,165,10,3,1,<"Print Window">,23,GadgetV2_24
  597.     even
  598. GadgetV2_24    AUTOGADGET     280+184,13+1*14,165,10,3,1,<"Save Window">,24,GadgetV2_25
  599.     even
  600. GadgetV2_25    AUTOGADGET     10,13+2*14,165,10,3,1,<"Close Screen">,25,GadgetV2_27
  601.     even
  602. GadgetV2_27    AUTOGADGET     10,13+3*14,165,10,3,1,<"Screen To Front">,27,GadgetV2_28
  603.     even
  604. GadgetV2_28    AUTOGADGET     10,13+4*14,165,10,3,1,<"Screen To Back">,28,GadgetV2_29
  605.     even
  606. GadgetV2_29    AUTOGADGET     10,13+5*14,165,10,3,1,<"Save Screen">,29,GadgetV2_30
  607.     even
  608. GadgetV2_30    AUTOGADGET     10,13+6*14,165,10,3,1,<"Print Screen">,30,GadgetV2_31
  609.     even
  610. GadgetV2_31    AUTOGADGET     10,13+7*14,165,10,3,1,<"Add Bitplane">,31,GadgetV2_32
  611.     even
  612. GadgetV2_32    AUTOGADGET     10,13+8*14,165,10,3,1,<"Sub Bitplane">,32,GadgetV2_33
  613.     even
  614. GadgetV2_33    AUTOGADGET     10,13+10*14,165,10,3,1,<"Colour Requester">,33,GadgetV2_34
  615.     even
  616. GadgetV2_34    AUTOGADGET     10,13+9*14,165,10,3,1,<"Move To Left Edge">,34,Gadget1
  617.     even
  618.  
  619.  
  620.  
  621. Windowdef3    dc.w    (640-300)/2,25,300,120
  622.     dc.b    -1,-1
  623.     dc.l    GADGETUP
  624.     dc.l    WINDOWDRAG!ACTIVATE!SMART_REFRESH
  625.     dc.l    Gadget_About
  626.     dc.l    0
  627.     dc.l    W3_Title
  628.     dc.l    0,0
  629.     dc.w    0,0,0,0,CUSTOMSCREEN
  630. W3_Title    dc.b    "        » ABOUT  FENSTER «           ",0
  631.     even
  632. Gadget_About    AUTOGADGET     20,100,260,12,3,1,<"Exit">,0,0
  633.     even
  634.  
  635.  
  636.  
  637. Window2    dc.l    0
  638.  
  639.  
  640. ABOUT    lea.l    Windowdef3,a0        ; about FENSTER
  641.     move.l    ScreenPtr1,nw_Screen(a0)    
  642.     CALLINT    OpenWindow
  643.     tst.l    d0
  644.     beq    wait
  645.     move.l    d0,Window2
  646.  
  647. WindowPointer set Window2
  648.  
  649.     SETAPEN    #2
  650.     RECTFILL    #2,#10,#297,#118
  651.  
  652.     SETDRMD    #RP_JAM1
  653.     WRITE    #6+((290-23*8)/2),#20+1,#0,<"RF-Tools : FENSTER V2.1">
  654.     WRITE    #6+((290-31*8)/2),#29+1,#0,<"This utility is public domain !">
  655.     WRITE    #6+((290-24*8)/2),#40+1,#0,<"by: Roger Fischlin  ">
  656.     WRITE    #6+((290-24*8)/2),#49+1,#0,<"    Steigerwaldweg 6">
  657.     WRITE    #6+((290-24*8)/2),#58+1,#0,<"    D-6450 Hanau 7">
  658.     WRITE    #6+((290-24*8)/2),#67+1,#0,<"    West Germany">
  659.     WRITE    #6+((290-24*8)/2),#76+1,#0,<"    Phone:(06181) 650266">
  660.     WRITE    #6+((290-32*8)/2),#86+1,#0,<"How about reading the doc file ?">
  661.  
  662.  
  663.     WRITE    #5+((290-23*8)/2),#20,#1,<"RF-Tools : FENSTER V2.1">
  664.     WRITE    #5+((290-31*8)/2),#29,#1,<"This utility is public domain !">
  665.     WRITE    #5+((290-24*8)/2),#40,#3,<"by: Roger Fischlin  ">
  666.     WRITE    #5+((290-24*8)/2),#49,#3,<"    Steigerwaldweg 6">
  667.     WRITE    #5+((290-24*8)/2),#58,#3,<"    D-6450 Hanau 7">
  668.     WRITE    #5+((290-24*8)/2),#67,#3,<"    West Germany">
  669.     WRITE    #5+((290-24*8)/2),#76,#3,<"    Phone:(06181) 650266">
  670.     WRITE    #5+((290-32*8)/2),#86,#1,<"How about reading the doc file ?">
  671.     
  672.     lea.l    Gadget_About,a0
  673.     move.l    Window2,a1
  674.     sub.l    a2,a2
  675.     CALLINT    RefreshGadgets
  676.  
  677.  
  678.     move.l    Window2,a0        
  679.     move.l    wd_UserPort(a0),a0
  680.     CALLEXEC    WaitPort
  681.  
  682.     move.l    Window2,a0
  683.     CALLINT    CloseWindow
  684.     bra    wait
  685.  
  686.  
  687. Zeile    dc.b    "                   ... x ..  x .    ",0
  688.  
  689.     even
  690.  
  691.  
  692. * Ask User to select screen .... 
  693.     
  694. WindowPointer set Window1
  695.  
  696.  
  697. ShowScreen    moveq.l    #0,d0
  698.     move.b    d0,G12_Puffer
  699.     move.b    d0,G13_Puffer
  700.     move.b    d0,G14_Puffer
  701.     move.b    d0,G15_Puffer
  702.     move.b    d0,G16_Puffer
  703.     move.b    d0,G17_Puffer
  704.     move.b    d0,G18_Puffer
  705.     move.b    d0,G19_Puffer
  706.     move.b    d0,G20_Puffer
  707.     move.b    d0,G21_Puffer
  708.  
  709.     lea.l    Gadget12,a0        
  710.     move.l    Window1,a1
  711.     sub.l    a2,a2
  712.     CALLINT    RefreshGadgets
  713.  
  714.  
  715.     WRITE    #10+184,#20,#2,<"        Select Screen">
  716.     WRITE    #11+184,#19,#1,<"        Select Screen">
  717.     WRITE    #10+184,#26,#2,<"--------------------------------">
  718.     WRITE    #11+184,#25,#1,<"--------------------------------">
  719.     
  720.     SETAPEN    #3
  721.     moveq.l    #0,d5        ; get pointer to first screen
  722.     move.l    _IntuitionBase,a6
  723.     move.l    ib_FirstScreen(a6),a5
  724.     lea.l    Pointer,a3
  725.     clr.l    Anzahl
  726.     clr.l    Top
  727.  
  728. .SS1    move.l    sc_DefaultTitle(a5),a4    ; get screen title
  729.     lea.l    Zeile,a0        ; up to 32 characters
  730.     move.b    #"?",(a0)+
  731.     move.l    #30,d0
  732. .SS5    move.b    #" ",(a0)+
  733.     dbra    d0,.SS5
  734.     move.b    #"x",Zeile+59-32-4
  735.     move.b    #"x",Zeile+63-32-2
  736.     
  737.     lea.l    Zeile,a0
  738.  
  739. .SS2    tst.b    (a4)        ; leave out spaces
  740.     beq    .SS3
  741.     cmp.b    #" ",(a4)+
  742.     beq    .SS2
  743.     tst.b    -(a4)
  744.     beq    .SS3
  745.     move.l    #21,d0
  746. .SS4    move.b    (a4)+,d1
  747.     beq    .SS3
  748.     move.b    d1,(a0)+
  749.     dbra    d0,.SS4
  750.  
  751. .SS3    moveq.l    #0,d0        ; write screen width & height
  752.     move.w    sc_Width(a5),d0
  753.     lea.l    Zeile+54-32-4,a0
  754.     bsr    MakeZahl    
  755.     moveq.l    #0,d0
  756.     move.w    sc_Height(a5),d0
  757.     lea.l    Zeile+60-32-4,a0
  758.     bsr    MakeZahl    
  759.     lea.l    sc_BitMap(a5),a0
  760.     move.b    bm_Depth(a0),d0
  761.     add.b    #"0",d0
  762.     move.b    d0,Zeile+63-32    
  763.         
  764.  
  765.  
  766.     move.l    Window1,a1        
  767.     move.l    wd_RPort(a1),a1
  768.     move.l    #10+184,d0
  769.     move.l    d5,d1
  770.     lsl.l    #3,d1
  771.     add.l    #32,d1
  772.     CALLGRAF    Move
  773.     lea.l    Zeile,a0
  774.     move.l    Window1,a1
  775.     move.l    wd_RPort(a1),a1
  776.     move.l    #33,d0
  777.     CALLGRAF    Text
  778.     add.l    #1,Anzahl
  779.     
  780.     move.l    a5,(a3)+        ; any more screens ?
  781.     move.l    (a5),a5
  782.     cmp.l    #0,a5
  783.     beq    .SS6
  784.     
  785.     addq    #1,d5
  786.     cmp.w    #14,d5        ; up to 14 screens (DID YOU HAVE HAD MORE THAN 14 SCREENS ?!?)
  787.     bne    .SS1
  788. .SS6    rts
  789.  
  790. Top    dc.l    0        ; nummer of first pointer on display
  791. Anzahl    dc.l    0        ; number of pointers displayed
  792. FENSTER    dc.l    0        ; pointer to current window
  793. BILDSCHIRM    dc.l    0        ; pointer to current screen
  794. Pointer    ds.l    20*5        ; array containing the window pointers 
  795.  
  796.  
  797. MakeZahl    moveq.l    #3,d2        ; convert number (<1024)  into ASCII text 
  798.     moveq.l    #0,d3
  799.     lea.l    .Potenzen,a1
  800. .MZ1    move.b    #"0"-1,d1
  801. .MZ2    addq    #1,d1
  802.     sub.l    (a1),d0
  803.     bcc    .MZ2
  804.     add.l    (a1)+,d0
  805.     tst.b    d2
  806.     beq    .MZ3
  807.     cmp.b    #"0",d1
  808.     beq    .MZ4
  809.     moveq.l    #1,d3
  810.     bra    .MZ3
  811. .MZ4    tst.b    d3
  812.     bne    .MZ3
  813.     move.b    #" ",d1
  814. .MZ3    move.b    d1,(a0)+
  815.     dbra    d2,.MZ1
  816.     rts
  817. .Potenzen    dc.l    1000
  818.     dc.l    100
  819.     dc.l    10
  820.     dc.l    1
  821.  
  822. MakeZahl3    moveq.l    #2,d2    ; convert number (<1000)  into ASCII text
  823.     moveq.l    #0,d3
  824.     lea.l    .Potenzen,a1
  825. .MZ1    move.b    #"0"-1,d1
  826. .MZ2    addq    #1,d1
  827.     sub.l    (a1),d0
  828.     bcc    .MZ2
  829.     add.l    (a1)+,d0
  830.     tst.b    d2
  831.     beq    .MZ3
  832.     cmp.b    #"0",d1
  833.     beq    .MZ4
  834.     moveq.l    #1,d3
  835.     bra    .MZ3
  836. .MZ4    tst.b    d3
  837.     beq    .MZ5
  838. .MZ3    move.b    d1,(a0)+
  839. .MZ5    dbra    d2,.MZ1
  840.     clr.b    (a0)
  841.     rts
  842. .Potenzen    dc.l    100
  843.     dc.l    10
  844.     dc.l    1
  845.  
  846. MakeZahl2    moveq.l    #1,d2    ; convert number (<99)  into ASCII text
  847.     moveq.l    #0,d3
  848.     lea.l    .Potenzen,a1
  849. .MZ1    move.b    #"0"-1,d1
  850. .MZ2    addq    #1,d1
  851.     sub.l    (a1),d0
  852.     bcc    .MZ2
  853.     add.l    (a1)+,d0
  854.     tst.b    d2
  855.     beq    .MZ3
  856.     cmp.b    #"0",d1
  857.     beq    .MZ4
  858.     moveq.l    #1,d3
  859.     bra    .MZ3
  860. .MZ4    tst.b    d3
  861.     beq    .MZ5
  862. .MZ3    move.b    d1,(a0)+
  863. .MZ5    dbra    d2,.MZ1
  864.     clr.b    (a0)
  865.     rts
  866. .Potenzen    dc.l    10
  867.     dc.l    1
  868.  
  869. GetLine    sub.w    gg_TopEdge(a4),d6    ; calculate which screen / window was selected  
  870.     lsr.w    #3,d6
  871.     and.l    #$ffff,d6
  872.     move.l    Anzahl,d0
  873.     add.l    Top,d6
  874.     cmp.l    d0,d6
  875.     bge    .GetLine1
  876.     lea.l    Pointer,a0
  877.     lsl.l    #2,d6
  878.     move.l    (a0,d6),a0        ; a0 contains pointer
  879.     moveq.l    #0,d0
  880.     rts
  881. .GetLine1    moveq.l    #-1,d0        ; error - user selected space
  882.     rts
  883.  
  884. ScreenSelect    jsr    GetLine        ; list windows of selected screen    
  885.     tst.l    d0
  886.     bne    wait
  887.     move.l    a0,a5
  888.     move.l    a5,BILDSCHIRM
  889.     
  890.     SETAPEN    #0
  891.     RECTFILL    #10+184,#10,#270+184,#165
  892.     WRITE    #10+184,#26,#2,<"--------------------------------">
  893.     WRITE    #11+184,#25,#1,<"--------------------------------">
  894.     
  895. .SS1    move.l    sc_DefaultTitle(a5),a4    ; get screen title
  896.     lea.l    Zeile,a0        ; up to 32 characters
  897.     move.b    #"?",(a0)+
  898.     move.l    #30,d0
  899. .SS5    move.b    #" ",(a0)+
  900.     dbra    d0,.SS5
  901.     move.b    #"x",Zeile+59-32-4
  902.     move.b    #"x",Zeile+63-32-2
  903.     
  904.     lea.l    Zeile,a0
  905.  
  906. .SS2    tst.b    (a4)        ; leave out spaces
  907.     beq    .SS3
  908.     cmp.b    #" ",(a4)+
  909.     beq    .SS2
  910.     tst.b    -(a4)
  911.     beq    .SS3
  912.     move.l    #21,d0
  913. .SS4    move.b    (a4)+,d1
  914.     beq    .SS3
  915.     move.b    d1,(a0)+
  916.     dbra    d0,.SS4
  917.  
  918. .SS3    moveq.l    #0,d0        ; write screen width & height
  919.     move.w    sc_Width(a5),d0
  920.     lea.l    Zeile+54-32-4,a0
  921.     bsr    MakeZahl    
  922.     moveq.l    #0,d0
  923.     move.w    sc_Height(a5),d0
  924.     lea.l    Zeile+60-32-4,a0
  925.     bsr    MakeZahl    
  926.     lea.l    sc_BitMap(a5),a0
  927.     move.b    bm_Depth(a0),d0
  928.     add.b    #"0",d0
  929.     move.b    d0,Zeile+63-32    
  930.             
  931.  
  932.     SETAPEN    #2
  933.     move.l    Window1,a1
  934.     move.l    wd_RPort(a1),a1
  935.     move.l    #10+1+184,d0
  936.     move.l    #19+1,d1
  937.     CALLGRAF    Move
  938.     lea.l    Zeile,a0
  939.     move.l    Window1,a1
  940.     move.l    wd_RPort(a1),a1
  941.     move.l    #33,d0
  942.     CALLGRAF    Text
  943.     
  944.     SETAPEN    #1
  945.     move.l    Window1,a1
  946.     move.l    wd_RPort(a1),a1
  947.     move.l    #10+184,d0
  948.     move.l    #19,d1
  949.     CALLGRAF    Move
  950.     lea.l    Zeile,a0
  951.     move.l    Window1,a1
  952.     move.l    wd_RPort(a1),a1
  953.     move.l    #33,d0
  954.     CALLGRAF    Text
  955.  
  956.     move.l    #1,Mode
  957.  
  958.  
  959. GetWindows    SETAPEN    #0        ; store all windows on the screen in array and print their names 
  960.     RECTFILL    #10+184,#25,#270+184,#165
  961.     move.l    BILDSCHIRM,a5
  962.     clr.l    FENSTER        
  963.     lea.l    Pointer,a1
  964.     move.l    #20*5,d0
  965.     clr.l    Top
  966.     clr.l    Anzahl
  967.     clr.l    Pointer
  968.     move.l    sc_FirstWindow(a5),a5
  969. .Loop    cmp.l    #0,a5
  970.     beq    .Loop2
  971. .Loop3    move.l    a5,(a1)+
  972.     add.l    #1,Anzahl
  973.     move.l    (a5),a5
  974.     dbra    d0,.Loop
  975. .Loop2    move.l    Pointer,FENSTER    ; define first window as already selected
  976.  
  977.     jsr    FillIn        ; Fill in the gadgets on the bottom
  978.  
  979. ShowWindow    SETAPEN    #3
  980.     SETBPEN    #0
  981.     SETDRMD    #RP_JAM2
  982.  
  983.     move.l    Window1,a1
  984.     move.l    wd_RPort(a1),a1
  985.     move.l    #10+184,d0
  986.     move.l    #32,d1
  987.     CALLGRAF    Move
  988.     lea.l    ClearZeile,a0
  989.     move.l    Window1,a1
  990.     move.l    wd_RPort(a1),a1
  991.     move.l    #32,d0
  992.     CALLGRAF    Text
  993.  
  994.  
  995.     moveq.l    #0,d5
  996.     lea.l    Pointer,a3
  997.     move.l    Top,d4
  998.     lsl.l    #2,d4
  999.     add.l    d4,a3
  1000.  
  1001. .SS1    move.l    d5,d0
  1002.     add.l    Top,d0
  1003.     cmp.l    Anzahl,d0
  1004.     bge    .SS6
  1005.     
  1006.     SETBPEN    #0
  1007.     move.l    (a3)+,a5
  1008.     cmp.l    FENSTER,a5
  1009.     bne    .SS0
  1010.     SETBPEN    #2
  1011.  
  1012. .SS0    move.l    wd_Title(a5),a4    ; title up to 31 characters
  1013.     lea.l    Zeile,a0
  1014.     move.b    #"?",(a0)+
  1015.     move.l    #30,d0
  1016. .SS5    move.b    #" ",(a0)+
  1017.     dbra    d0,.SS5
  1018.     lea.l    Zeile,a0
  1019.  
  1020. .SS2    tst.b    (a4)
  1021.     beq    .SS3
  1022.     cmp.b    #" ",(a4)+
  1023.     beq    .SS2
  1024.     tst.b    -(a4)
  1025.     beq    .SS3
  1026.     move.l    #31,d0
  1027. .SS4    move.b    (a4)+,d1
  1028.     beq    .SS3
  1029.     move.b    d1,(a0)+
  1030.     dbra    d0,.SS4
  1031.  
  1032. .SS3    
  1033.     move.l    Window1,a1
  1034.     move.l    wd_RPort(a1),a1
  1035.     move.l    #10+184,d0
  1036.     move.l    d5,d1
  1037.     lsl.l    #3,d1
  1038.     add.l    #32,d1
  1039.     CALLGRAF    Move
  1040.     lea.l    Zeile,a0
  1041.     move.l    Window1,a1
  1042.     move.l    wd_RPort(a1),a1
  1043.     move.l    #32,d0
  1044.     CALLGRAF    Text
  1045.  
  1046.     addq    #1,d5
  1047.     cmp.w    #17,d5
  1048.     bne    .SS1
  1049. .SS6    SETDRMD    #RP_JAM1
  1050.     bra    wait
  1051.  
  1052.  
  1053. ClearZeile    dc.b    "                                     "
  1054.     even
  1055.  
  1056. WindowSelect    jsr    GetLine    ; which window was selected ?    
  1057.     tst.l    d0
  1058.     bne    wait
  1059.     move.l    a0,FENSTER
  1060.     jsr    FillIn
  1061.  
  1062.     bra    ShowWindow
  1063.  
  1064.  
  1065. FRONT    move.l    FENSTER,a0    ; move window to front
  1066.     cmp.l    #0,a0
  1067.     beq    Error
  1068.     CALLINT    WindowToFront
  1069.     bra    wait
  1070. BACK    move.l    FENSTER,a0    ;  "    "     " back
  1071.     cmp.l    #0,a0
  1072.     beq    Error
  1073.     CALLINT    WindowToBack
  1074.     bra    wait
  1075. CLEAR    move.l    FENSTER,a0    ; clear pointer
  1076.     cmp.l    #0,a0
  1077.     beq    Error
  1078.     CALLINT    ClearPointer
  1079.     bra    wait
  1080.  
  1081. NewLimits    move.l    FENSTER,a0    ; define new limits
  1082.     cmp.l    #0,a0
  1083.     beq    Error
  1084.     moveq.l    #0,d0
  1085.     moveq.l    #0,d1
  1086.     moveq.l    #0,d2
  1087.     moveq.l    #0,d3
  1088.  
  1089.     move.w    G12_Info+si_LongInt+2,d0    
  1090.     move.w    G13_Info+si_LongInt+2,d1    
  1091.     move.w    G14_Info+si_LongInt+2,d2    
  1092.     move.w    G15_Info+si_LongInt+2,d3
  1093.     
  1094.     CALLINT    WindowLimits
  1095.     bra    wait    
  1096.  
  1097. NewPen    move.l    FENSTER,a0     ; define new pens
  1098.     cmp.l    #0,a0
  1099.     beq    Error
  1100.     move.b    G16_Info+si_LongInt+3,wd_BlockPen(a0)
  1101.     move.b    G21_Info+si_LongInt+3,wd_DetailPen(a0)
  1102.  
  1103.  
  1104. FRAME    move.l    FENSTER,a0
  1105.     cmp.l    #0,a0
  1106.     beq    Error
  1107.     CALLINT    RefreshWindowFrame    ; use them !
  1108.     bra    wait
  1109. REFRESH    move.l    FENSTER,a1        ; refresh gadgets (if there are any to be refreshed !)
  1110.     cmp.l    #0,a1
  1111.     beq    Error
  1112.     move.l    wd_FirstGadget(a1),a0
  1113.     sub.l    a2,a2
  1114.     cmp.l    #0,a0
  1115.     beq    Error
  1116.     CALLINT    RefreshGadgets
  1117.     bra    wait
  1118.  
  1119. FillIn    move.l    FENSTER,a6        ; put data from window into longint gadgets
  1120.     cmp.l    #0,a6
  1121.     beq    .Label1
  1122.     
  1123.     lea.l    G12_Puffer,a0
  1124.     moveq.l    #0,d0
  1125.     move.w    wd_MinWidth(a6),d0
  1126.  
  1127.     move.l    d0,G12_Info+si_LongInt
  1128.  
  1129.     bsr    MakeZahl3
  1130.     
  1131.     lea.l    G13_Puffer,a0
  1132.     moveq.l    #0,d0
  1133.     move.w    wd_MinHeight(a6),d0
  1134.     move.l    d0,G13_Info+si_LongInt
  1135.  
  1136.     bsr    MakeZahl3
  1137.  
  1138.     lea.l    G14_Puffer,a0
  1139.     moveq.l    #0,d0
  1140.     move.w    wd_MaxWidth(a6),d0
  1141.     cmp.w    #999,d0
  1142.     bls    .Label3
  1143.     moveq.l    #0,d0
  1144. .Label3    move.l    d0,G14_Info+si_LongInt
  1145.  
  1146.     bsr    MakeZahl3
  1147.  
  1148.     lea.l    G15_Puffer,a0
  1149.     moveq.l    #0,d0
  1150.     move.w    wd_MaxHeight(a6),d0
  1151.     cmp.w    #999,d0
  1152.     bls    .Label4
  1153.     moveq.l    #0,d0
  1154. .Label4    move.l    d0,G15_Info+si_LongInt
  1155.  
  1156.     bsr    MakeZahl3
  1157.  
  1158.     lea.l    G17_Puffer,a0
  1159.     moveq.l    #0,d0
  1160.     move.w    wd_LeftEdge(a6),d0
  1161.     move.l    d0,G17_Info+si_LongInt
  1162.  
  1163.     bsr    MakeZahl3
  1164.  
  1165.     lea.l    G18_Puffer,a0
  1166.     moveq.l    #0,d0
  1167.     move.w    wd_TopEdge(a6),d0
  1168.     move.l    d0,G18_Info+si_LongInt
  1169.  
  1170.     bsr    MakeZahl3
  1171.  
  1172.  
  1173.     lea.l    G19_Puffer,a0
  1174.     moveq.l    #0,d0
  1175.     move.w    wd_Width(a6),d0
  1176.     move.l    d0,G19_Info+si_LongInt
  1177.  
  1178.     bsr    MakeZahl3
  1179.  
  1180.     lea.l    G20_Puffer,a0
  1181.     moveq.l    #0,d0
  1182.     move.w    wd_Height(a6),d0
  1183.     move.l    d0,G20_Info+si_LongInt
  1184.  
  1185.     bsr    MakeZahl3
  1186.  
  1187.     
  1188.     lea.l    G16_Puffer,a0
  1189.     moveq.l    #0,d0
  1190.     move.b    wd_BlockPen(a6),d0
  1191.     move.l    d0,G16_Info+si_LongInt
  1192.  
  1193.     bsr    MakeZahl2
  1194.  
  1195.     lea.l    G21_Puffer,a0
  1196.     moveq.l    #0,d0
  1197.     move.b    wd_DetailPen(a6),d0
  1198.     move.l    d0,G21_Info+si_LongInt
  1199.  
  1200.     bsr    MakeZahl2
  1201.  
  1202.     lea.l    Gadget12,a0
  1203.     move.l    Window1,a1
  1204.     sub.l    a2,a2
  1205.     CALLINT    RefreshGadgets
  1206.     rts
  1207.  
  1208. .Label1    clr.b    G12_Puffer
  1209.     clr.b    G13_Puffer
  1210.     clr.b    G14_Puffer
  1211.     clr.b    G15_Puffer
  1212.     clr.b    G16_Puffer
  1213.     clr.b    G17_Puffer
  1214.     clr.b    G18_Puffer
  1215.     clr.b    G19_Puffer
  1216.     clr.b    G20_Puffer
  1217.     clr.b    G21_Puffer
  1218.     
  1219.     lea.l    Gadget12,a0
  1220.     move.l    Window1,a1
  1221.     sub.l    a2,a2
  1222.     CALLINT    RefreshGadgets
  1223.     rts
  1224.  
  1225.  
  1226.  
  1227. Windowdef4    dc.w    (640-300)/2,45,300,80
  1228.     dc.b    -1,-1
  1229.     dc.l    GADGETUP
  1230.     dc.l    WINDOWDRAG!ACTIVATE!SMART_REFRESH
  1231.     dc.l    GadgetGURU
  1232.     dc.l    0
  1233.     dc.l    W4_Title
  1234.     dc.l    0,0
  1235.     dc.w    0,0,0,0,CUSTOMSCREEN
  1236. W4_Title    dc.b    "          » ERROR MESSAGE «           ",0
  1237.     even
  1238. GadgetGURU    AUTOGADGET     20,60,260,12,3,1,<"Exit">,0,0
  1239.     even
  1240.  
  1241. GURU    lea.l    Windowdef4,a0
  1242.     move.l    ScreenPtr1,nw_Screen(a0)    
  1243.     CALLINT    OpenWindow
  1244.     tst.l    d0
  1245.     beq    Undo
  1246.     move.l    d0,Window2
  1247.  
  1248. WindowPointer set Window2
  1249.  
  1250.     SETAPEN    #2
  1251.     RECTFILL    #2,#10,#297,#78
  1252.  
  1253.     SETDRMD    #RP_JAM1
  1254.     WRITE    #6+((290-32*8)/2),#20+1,#0,<"Sorry - But if I moved / resized">
  1255.     WRITE    #6+((290-29*8)/2),#30+1,#0,<"the window , the system would">
  1256.     WRITE    #6+((290-30*8)/2),#40+1,#0,<"crash !!!  Check screen size !">
  1257.  
  1258.     WRITE    #5+((290-32*8)/2),#20,#1,<"Sorry - But if I moved / resized">
  1259.     WRITE    #5+((290-29*8)/2),#30,#1,<"the window , the system would">
  1260.     WRITE    #5+((290-30*8)/2),#40,#1,<"crash !!!  Check screen size !">
  1261.  
  1262.  
  1263.     
  1264.     lea.l    GadgetGURU,a0
  1265.     move.l    Window2,a1
  1266.     sub.l    a2,a2
  1267.     CALLINT    RefreshGadgets
  1268.  
  1269.     move.l    Window2,a0        
  1270.     move.l    wd_UserPort(a0),a0
  1271.     CALLEXEC    WaitPort
  1272.  
  1273.     move.l    Window2,a0
  1274.     CALLINT    CloseWindow
  1275.  
  1276. Undo    move.l    FENSTER,a6        ; get current data (to undo illegal data) 
  1277.     lea.l    G17_Puffer,a0
  1278.     moveq.l    #0,d0
  1279.     move.w    wd_LeftEdge(a6),d0
  1280.     move.l    d0,G17_Info+si_LongInt
  1281.  
  1282.     bsr    MakeZahl3
  1283.  
  1284.     lea.l    G18_Puffer,a0
  1285.     moveq.l    #0,d0
  1286.     move.w    wd_TopEdge(a6),d0
  1287.     move.l    d0,G18_Info+si_LongInt
  1288.  
  1289.     bsr    MakeZahl3
  1290.  
  1291.  
  1292.     lea.l    G19_Puffer,a0
  1293.     moveq.l    #0,d0
  1294.     move.w    wd_Width(a6),d0
  1295.     move.l    d0,G19_Info+si_LongInt
  1296.  
  1297.     bsr    MakeZahl3
  1298.  
  1299.     lea.l    G20_Puffer,a0
  1300.     moveq.l    #0,d0
  1301.     move.w    wd_Height(a6),d0
  1302.     move.l    d0,G20_Info+si_LongInt
  1303.  
  1304.     bsr    MakeZahl3
  1305.  
  1306.     lea.l    Gadget17,a0
  1307.     move.l    Window1,a1
  1308.     sub.l    a2,a2
  1309.     CALLINT    RefreshGadgets
  1310.  
  1311.     bra    wait
  1312.     
  1313. WindowPointer set Window1
  1314.  
  1315. MoveWindow    move.l    FENSTER,a0        ; move window
  1316.     move.l    G17_Info+si_LongInt,d0
  1317.     move.l    G18_Info+si_LongInt,d1
  1318.  
  1319.     move.l    d0,d2
  1320.     move.l    d1,d3
  1321.  
  1322.     add.w    wd_Width(a0),d2
  1323.     add.w    wd_Height(a0),d3
  1324.  
  1325.     move.l    wd_WScreen(a0),a1
  1326.  
  1327.     cmp.w    sc_Width(a1),d2    ; check if they are possible !!!!
  1328.     bhi    GURU
  1329.     cmp.w    sc_Height(a1),d3
  1330.     bhi    GURU
  1331.     
  1332.     sub.w    wd_LeftEdge(a0),d0
  1333.     sub.w    wd_TopEdge(a0),d1
  1334.  
  1335.     CALLINT    MoveWindow
  1336.     bra    wait
  1337.  
  1338. SizeWindow    move.l    FENSTER,a0        ; re-size window
  1339.     move.l    G19_Info+si_LongInt,d0
  1340.     move.l    G20_Info+si_LongInt,d1
  1341.  
  1342.     move.l    d0,d2
  1343.     move.l    d1,d3
  1344.  
  1345.     add.w    wd_LeftEdge(a0),d2
  1346.     add.w    wd_TopEdge(a0),d3
  1347.  
  1348.     move.l    wd_WScreen(a0),a1
  1349.  
  1350.     cmp.w    sc_Width(a1),d2    ; check if they are possible !!!!
  1351.     bhi    GURU
  1352.     cmp.w    sc_Height(a1),d3
  1353.     bhi    GURU
  1354.     
  1355.     sub.w    wd_Width(a0),d0
  1356.     sub.w    wd_Height(a0),d1
  1357.  
  1358.     CALLINT    SizeWindow
  1359.     bra    wait    
  1360.     
  1361.  
  1362.  
  1363. Windowdef5    dc.w    275+184,30,174,100
  1364.     dc.b    -1,-1
  1365.     dc.l    GADGETUP
  1366.     dc.l    WINDOWDRAG!ACTIVATE!SMART_REFRESH
  1367.     dc.l    GadgetKILL1
  1368.     dc.l    0
  1369.     dc.l    W5_Title
  1370.     dc.l    0,0
  1371.     dc.w    0,0,0,0,CUSTOMSCREEN
  1372. W5_Title    dc.b    " » KILL WINDOW «     ",0
  1373.     even
  1374. GadgetKILL1    AUTOGADGET     10,60,154,12,3,1,<"YES !">,0,GadgetKILL2
  1375.     even
  1376. GadgetKILL2    AUTOGADGET     10,80,154,12,3,1,<"No - forget it !">,1,0
  1377.     even
  1378.  
  1379. KillWindow    tst.l    FENSTER
  1380.     beq    Error
  1381.  
  1382.     lea.l    Windowdef5,a0
  1383.     move.l    ScreenPtr1,nw_Screen(a0)    
  1384.     CALLINT    OpenWindow
  1385.     tst.l    d0
  1386.     beq    KILL_IT
  1387.     move.l    d0,Window2
  1388.  
  1389. WindowPointer set Window2
  1390.  
  1391.     SETAPEN    #2
  1392.     RECTFILL    #2,#10,#171,#98
  1393.  
  1394.     SETDRMD    #RP_JAM1
  1395.     WRITE    #1+((174-18*8)/2),#20+1,#0,<"Do you really want">
  1396.     WRITE    #1+((174-18*8)/2),#30+1,#0,<"to    close    the">
  1397.     WRITE    #1+((174-18*8)/2),#40+1,#0,<"     window ?     ">
  1398.  
  1399.     WRITE    #0+((174-18*8)/2),#20,#1,<"Do you really want">
  1400.     WRITE    #0+((174-18*8)/2),#30,#1,<"to    close    the">
  1401.     WRITE    #0+((174-18*8)/2),#40,#1,<"     window ?     ">
  1402.     
  1403.  
  1404.     lea.l    GadgetKILL1,a0
  1405.     move.l    Window2,a1
  1406.     sub.l    a2,a2
  1407.     CALLINT    RefreshGadgets
  1408.  
  1409.     move.l    Window2,a0        
  1410.     move.l    wd_UserPort(a0),a0
  1411.     move.l    a0,a5
  1412.     CALLEXEC    WaitPort        
  1413.     move.l    a5,a0
  1414.     CALLEXEC    GetMsg        ; get message
  1415.     move.l    d0,a1    
  1416.     move.l    im_IAddress(a1),a4
  1417.     CALLEXEC     ReplyMsg        ; reply message        
  1418.  
  1419.     tst.w    gg_GadgetID(a4)
  1420.     beq    KILL_IT
  1421.  
  1422.     move.l    Window2,a0
  1423.     CALLINT    CloseWindow
  1424.     bra    wait
  1425.  
  1426. KILL_IT    move.l    Window2,a0
  1427.     CALLINT    CloseWindow
  1428.     move.l    FENSTER,a0
  1429.     CALLINT    CloseWindow
  1430.     bra    GetWindows
  1431.  
  1432. Windowpointer    set Window1
  1433.  
  1434.  
  1435.     
  1436.  
  1437. AUTOGADGET2    macro
  1438. * \1,\2    x,y
  1439. * \3,\4    size
  1440. * \5,\6    colors (text & Box)
  1441. * \7       Text
  1442. * \8       ID
  1443. * \9       NextGadget
  1444.  
  1445.     dc.l    \9
  1446.     dc.w    \1,\2,\3,\4
  1447.     dc.w    GADGHCOMP!SELECTED,RELVERIFY!TOGGLESELECT,BOOLGADGET
  1448.     dc.l    AG2adget\@_Box
  1449.     dc.l    0,AG2adget\@_Text,0,0
  1450.     dc.w    \8,0,0
  1451. AG2adget\@_Box    BOX    -1,-1,\3,\4,\5,0
  1452.     even
  1453.  
  1454. AG2_T_String\@    dc.b    \7,0
  1455. AG2_T_String\@_End    
  1456.     even
  1457. AG2adget\@_Text    dc.b    2,0,RP_JAM1,0
  1458.     dc.w    (\3-(AG2_T_String\@_End-AG2_T_String\@-1)*8)/2+1,((\4-8)/2)+1
  1459.     dc.l    TOPAZ_80,AG2_T_String\@,AG2_Text2_\@
  1460.  
  1461. AG2_Text2_\@    dc.b    \6,0,RP_JAM1,0
  1462.     dc.w    (\3-(AG2_T_String\@_End-AG2_T_String\@-1)*8)/2),(\4-8)/2
  1463.     dc.l    TOPAZ_80,AG2_T_String\@,0
  1464.  
  1465.     
  1466.     IFEQ    FontFlag
  1467.  
  1468. TOPAZ_80    dc.l    T_80name
  1469.     dc.w    TOPAZ_EIGHTY
  1470.     dc.b    FS_NORMAL,FPF_ROMFONT
  1471.     even
  1472. T_80name    dc.b    "topaz.font",0
  1473.  
  1474. FontFlag    set    1
  1475.     endc
  1476.     endm
  1477.  
  1478.  
  1479.  
  1480.  
  1481. Windowdef6    dc.w    640-300-10,0,300,199
  1482.     dc.b    -1,-1
  1483.     dc.l    GADGETUP
  1484.     dc.l    WINDOWDRAG!ACTIVATE!SMART_REFRESH
  1485.     dc.l    GadgetIDCMP
  1486.     dc.l    0
  1487.     dc.l    W6_Title
  1488.     dc.l    0,0
  1489.     dc.w    0,0,0,0,CUSTOMSCREEN
  1490. W6_Title    dc.b    "          » IDCMP FLAGS «                  ",0
  1491.     even
  1492. GadgetIDCMP    AUTOGADGET2     20,20,120,10,3,1,<"SIZEVERIFY">,0,GadgetIDCMP2
  1493.     even
  1494. GadgetIDCMP2    AUTOGADGET2     20,35,120,10,3,1,<"NEWSIZE">,1,GadgetIDCMP3
  1495.     even
  1496. GadgetIDCMP3    AUTOGADGET2     20,50,120,10,3,1,<"REFRESHWINDOW">,2,GadgetIDCMP4
  1497.     even
  1498. GadgetIDCMP4    AUTOGADGET2     20,65,120,10,3,1,<"MOUSEBUTTONS">,3,GadgetIDCMP5
  1499.     even
  1500. GadgetIDCMP5    AUTOGADGET2     20,80,120,10,3,1,<"MOUSEMOVE">,4,GadgetIDCMP6
  1501.     even
  1502. GadgetIDCMP6    AUTOGADGET2     20,95,120,10,3,1,<"GADGETDOWN">,5,GadgetIDCMP7
  1503.     even
  1504. GadgetIDCMP7    AUTOGADGET2     20,110,120,10,3,1,<"GADGETUP">,6,GadgetIDCMP8
  1505.     even
  1506. GadgetIDCMP8    AUTOGADGET2     20,125,120,10,3,1,<"REQSET">,7,GadgetIDCMP9
  1507.     even
  1508. GadgetIDCMP9    AUTOGADGET2     20,140,120,10,3,1,<"MENUPICK">,8,GadgetIDCMP10
  1509.     even
  1510. GadgetIDCMP10    AUTOGADGET2     20,155,120,10,3,1,<"CLOSEWINDOW">,9,GadgetIDCMP11
  1511.     even
  1512. GadgetIDCMP11    AUTOGADGET2     20,170,120,10,3,1,<"RAWKEY">,10,GadgetIDCMP12
  1513.     even
  1514. GadgetIDCMP12    AUTOGADGET2     20,185,120,10,3,1,<"REQVERIFY">,11,GadgetIDCMP13
  1515.     even
  1516.  
  1517. GadgetIDCMP13    AUTOGADGET2     160,20,120,10,3,1,<"REQCLEAR">,12,GadgetIDCMP14
  1518.     even
  1519. GadgetIDCMP14    AUTOGADGET2     160,35,120,10,3,1,<"MENUVERIFY">,13,GadgetIDCMP15
  1520.     even
  1521. GadgetIDCMP15    AUTOGADGET2     160,50,120,10,3,1,<"NEWPREFS">,14,GadgetIDCMP16
  1522.     even
  1523. GadgetIDCMP16    AUTOGADGET2     160,65,120,10,3,1,<"DISKINSERTED">,15,GadgetIDCMP17
  1524.     even
  1525. GadgetIDCMP17    AUTOGADGET2     160,80,120,10,3,1,<"DISKREMOVED">,16,GadgetIDCMP18
  1526.     even
  1527. GadgetIDCMP18    AUTOGADGET2     160,95,120,10,3,1,<"WBENCHMESSAGE">,17,GadgetIDCMP19
  1528.     even
  1529. GadgetIDCMP19    AUTOGADGET2     160,110,120,10,3,1,<"ACTIVEWINDOW">,18,GadgetIDCMP20
  1530.     even
  1531. GadgetIDCMP20    AUTOGADGET2     160,125,120,10,3,1,<"INACTIVEWINDOW">,19,GadgetIDCMP21
  1532.     even
  1533. GadgetIDCMP21    AUTOGADGET2     160,140,120,10,3,1,<"DELTAMOVE">,20,GadgetIDCMP22
  1534.     even
  1535. GadgetIDCMP22    AUTOGADGET2     160,155,120,10,3,1,<"VANILLAKEY">,21,GadgetIDCMP23
  1536.     even
  1537. GadgetIDCMP23    AUTOGADGET2     160,170,120,10,3,1,<"INTUITICKS">,22,GadgetIDCMP_CA
  1538.     even
  1539.  
  1540. GadgetIDCMP_CA    AUTOGADGET     160,185,60,10,1,3,<"Cancel">,100,GadgetIDCMP_OK
  1541.     even
  1542.  
  1543. GadgetIDCMP_OK    AUTOGADGET     240,185,40,10,1,3,<"OK">,101,0
  1544.     even
  1545.  
  1546.  
  1547.  
  1548.  
  1549.  
  1550.  
  1551. IDCMP    tst.l    FENSTER
  1552.     beq    Error
  1553.  
  1554.     move.l    FENSTER,a0
  1555.     move.l    wd_IDCMPFlags(a0),.IDCMPFlags
  1556.     move.l    wd_IDCMPFlags(a0),d1
  1557.     
  1558.  
  1559.     moveq.l    #0,d0        ; if bit is 1, set gadget selected
  1560.     lea.l    .GadgetList,a0
  1561. .Label1    move.l    (a0)+,a1
  1562.     btst    d0,d1
  1563.     bne    .Label2
  1564.     and.w    #$ffff-SELECTED,gg_Flags(a1)
  1565.     bra    .Label3
  1566. .Label2    or.w    #SELECTED,gg_Flags(a1)
  1567. .Label3    addq    #1,d0
  1568.     cmp.b    #23,d0
  1569.     bne    .Label1
  1570.  
  1571.  
  1572.     
  1573.     lea.l    Windowdef6,a0
  1574.     move.l    ScreenPtr1,nw_Screen(a0)    
  1575.     CALLINT    OpenWindow
  1576.     tst.l    d0
  1577.     beq    wait
  1578.     move.l    d0,Window2
  1579.  
  1580. WindowPointer set Window2
  1581.  
  1582.     SETAPEN    #2
  1583.     RECTFILL    #2,#10,#297,#197
  1584.  
  1585.     
  1586.     lea.l    GadgetIDCMP,a0
  1587.     move.l    Window2,a1
  1588.     sub.l    a2,a2
  1589.     CALLINT    RefreshGadgets
  1590.  
  1591.  
  1592.     
  1593.  
  1594.  
  1595. .wait    move.l    Window2,a0        
  1596.     move.l    wd_UserPort(a0),a0
  1597.     move.l    a0,a5
  1598.     CALLEXEC    WaitPort        
  1599.     move.l    a5,a0
  1600.     CALLEXEC    GetMsg        ; get message
  1601.     move.l    d0,a1    
  1602.     move.l    im_IAddress(a1),a4
  1603.     CALLEXEC     ReplyMsg        ; reply message        
  1604.  
  1605.     moveq.l    #0,d0        
  1606.     move.w    gg_GadgetID(a4),d0
  1607.  
  1608.     cmp.w    #100,d0
  1609.     beq    .Quit
  1610.     cmp.w    #101,d0
  1611.     beq    .Change
  1612.     
  1613.     move.l    .IDCMPFlags,d1
  1614.     bchg    d0,d1
  1615.     move.l    d1,.IDCMPFlags
  1616.     bra    .wait
  1617. .Change    move.l    FENSTER,a0
  1618.     move.l    .IDCMPFlags,d0
  1619.     CALLINT    ModifyIDCMP
  1620.     
  1621. .Quit    move.l    Window2,a0
  1622.     CALLINT    CloseWindow
  1623.     
  1624.     bra    wait
  1625.  
  1626. .GadgetList    dc.l    GadgetIDCMP
  1627.     dc.l    GadgetIDCMP2
  1628.     dc.l    GadgetIDCMP3
  1629.     dc.l    GadgetIDCMP4
  1630.     dc.l    GadgetIDCMP5
  1631.     dc.l    GadgetIDCMP6
  1632.     dc.l    GadgetIDCMP7
  1633.     dc.l    GadgetIDCMP8
  1634.     dc.l    GadgetIDCMP9
  1635.     dc.l    GadgetIDCMP10
  1636.     dc.l    GadgetIDCMP11
  1637.     dc.l    GadgetIDCMP12
  1638.     dc.l    GadgetIDCMP13
  1639.     dc.l    GadgetIDCMP14
  1640.     dc.l    GadgetIDCMP15
  1641.     dc.l    GadgetIDCMP16
  1642.     dc.l    GadgetIDCMP17
  1643.     dc.l    GadgetIDCMP18
  1644.     dc.l    GadgetIDCMP19
  1645.     dc.l    GadgetIDCMP20
  1646.     dc.l    GadgetIDCMP21
  1647.     dc.l    GadgetIDCMP22
  1648.     dc.l    GadgetIDCMP23
  1649.     
  1650. .IDCMPFlags    dc.l    0
  1651.  
  1652. Windowdef9    dc.w    5,30,174,100
  1653.     dc.b    -1,-1
  1654.     dc.l    GADGETUP
  1655.     dc.l    WINDOWDRAG!ACTIVATE!SMART_REFRESH
  1656.     dc.l    GadgetKILL1
  1657.     dc.l    0
  1658.     dc.l    W9_Title
  1659.     dc.l    0,0
  1660.     dc.w    0,0,0,0,CUSTOMSCREEN
  1661. W9_Title    dc.b    "  » KILL SCREEN «    ",0    
  1662.  
  1663.  
  1664. ALL    lea.l    Windowdef9(pc),a0
  1665.     move.l    ScreenPtr1,nw_Screen(a0)    
  1666.     CALLINT    OpenWindow
  1667.     tst.l    d0
  1668.     beq    KILL_ALL
  1669.     move.l    d0,Window2
  1670.  
  1671. WindowPointer set Window2
  1672.  
  1673.     SETAPEN    #2
  1674.     RECTFILL    #2,#10,#171,#98
  1675.  
  1676.     SETDRMD    #RP_JAM1
  1677.     WRITE    #1+((174-18*8)/2),#20+1,#0,<"Do you really want">
  1678.     WRITE    #1+((174-18*8)/2),#30+1,#0,<"to    close    the">
  1679.     WRITE    #1+((174-18*8)/2),#40+1,#0,<"     screen ?     ">
  1680.  
  1681.     WRITE    #0+((174-18*8)/2),#20,#1,<"Do you really want">
  1682.     WRITE    #0+((174-18*8)/2),#30,#1,<"to    close    the">
  1683.     WRITE    #0+((174-18*8)/2),#40,#1,<"     screen ?     ">
  1684.     
  1685.  
  1686.     lea.l    GadgetKILL1,a0
  1687.     move.l    Window2,a1
  1688.     sub.l    a2,a2
  1689.     CALLINT    RefreshGadgets
  1690.  
  1691.     move.l    Window2,a0        
  1692.     move.l    wd_UserPort(a0),a0
  1693.     move.l    a0,a5
  1694.     CALLEXEC    WaitPort        
  1695.     move.l    a5,a0
  1696.     CALLEXEC    GetMsg        ; get message
  1697.     move.l    d0,a1    
  1698.     move.l    im_IAddress(a1),a4
  1699.     CALLEXEC     ReplyMsg        ; reply message        
  1700.  
  1701.     tst.w    gg_GadgetID(a4)
  1702.     beq    KILL_ALL
  1703.  
  1704.     move.l    Window2,a0
  1705.     CALLINT    CloseWindow
  1706.     bra    wait
  1707.  
  1708. KILL_ALL    
  1709.     move.l    BILDSCHIRM,a5
  1710.  
  1711. .Label1    move.l    sc_FirstWindow(a5),a0    ; close window (if there are any windows left )
  1712.     cmp.l    #0,a0
  1713.     beq    .Label2
  1714.     CALLINT    CloseWindow
  1715.     bra    .Label1
  1716. .Label2    move.l    BILDSCHIRM,a0
  1717.     CALLINT    CloseScreen
  1718.     move.l    Window2,a0
  1719.     CALLINT    CloseWindow
  1720.     jmp    ChangeScreen
  1721.  
  1722.  
  1723. Windowdef7    dc.w    5,50,174,100
  1724.     dc.b    -1,-1
  1725.     dc.l    GADGETUP
  1726.     dc.l    WINDOWDRAG!ACTIVATE!SMART_REFRESH
  1727.     dc.l    Gadget_7_1
  1728.     dc.l    0
  1729.     dc.l    W7_Title
  1730.     dc.l    0,0
  1731.     dc.w    0,0,0,0,CUSTOMSCREEN
  1732. W7_Title    dc.b    "  Save Screen As     ",0
  1733.     even
  1734. Gadget_7_1    AUTOGADGET     10,20,154,12,3,1,<"IFF-ILBM">,0,Gadget_7_2
  1735.     even
  1736. Gadget_7_2    AUTOGADGET     10,40,154,12,3,1,<"Dump">,1,Gadget_7_3
  1737.     even
  1738. Gadget_7_3    AUTOGADGET     10,60,154,12,3,1,<"Colour & Dump">,2,Gadget_7_4
  1739.     even
  1740. Gadget_7_4    AUTOGADGET     10,80,154,12,3,1,<"No - forget it !">,3,0
  1741.     even
  1742.  
  1743. SaveMode    dc.b    0
  1744.     even
  1745.  
  1746. SaveScreen    clr.b    SaveMode
  1747.     lea.l    Windowdef7(pc),a0
  1748.     move.l    ScreenPtr1,nw_Screen(a0)    
  1749.     CALLINT    OpenWindow
  1750.     tst.l    d0
  1751.     beq    SS_IFF
  1752.     move.l    d0,Window2
  1753.  
  1754. WindowPointer set Window2
  1755.  
  1756.     SETAPEN    #2
  1757.     RECTFILL    #2,#10,#171,#98
  1758.  
  1759.  
  1760.     lea.l    Gadget_7_1,a0
  1761.     move.l    Window2,a1
  1762.     sub.l    a2,a2
  1763.     CALLINT    RefreshGadgets
  1764.  
  1765.     move.l    Window2,a0        
  1766.     move.l    wd_UserPort(a0),a0
  1767.     move.l    a0,a5
  1768.     CALLEXEC    WaitPort        
  1769.     move.l    a5,a0
  1770.     CALLEXEC    GetMsg        ; get message
  1771.     move.l    d0,a1    
  1772.     move.l    im_IAddress(a1),a4
  1773.     CALLEXEC     ReplyMsg        ; reply message        
  1774.     move.l    Window2,a0
  1775.     CALLINT    CloseWindow
  1776.     move.b    gg_GadgetID+1(a4),SaveMode
  1777.     cmp.b    #3,SaveMode
  1778.     beq    wait
  1779. SS_IFF    moveq.l    #0,d0
  1780.     move.b    SaveMode,d0
  1781.     mulu    #40,d0
  1782.     add.l    #SaveText1,d0
  1783.     lea.l    FileReq(pc),a0    
  1784.     move.l    d0,(a0)
  1785.     move.l    _ARPBase,a6
  1786.     move.l    Window1,12(a0)
  1787.     jsr    -294(a6)        ; file requester
  1788.     tst.l    d0
  1789.     beq    wait    
  1790.     move.l    d0,d6
  1791.     move.l    #Dir,d1
  1792.     moveq.l    #ACCESS_READ,d2
  1793.     CALLDOS    Lock
  1794.     tst.l    d0
  1795.     beq    .O1
  1796.     move.l    d0,d1
  1797.     CALLDOS    CurrentDir        ; set current dir
  1798. .O1    move.l    d6,d0
  1799.     tst.b    SaveMode
  1800.     beq    SaveIFF
  1801.     move.l    d0,d1
  1802.     move.l    #MODE_NEWFILE,d2
  1803.     CALLDOS    Open
  1804.     tst.l    d0
  1805.     beq    .Error
  1806.     move.l    d0,d7
  1807.     cmp.b    #1,SaveMode
  1808.     beq    .SaveDump
  1809.     move.l    BILDSCHIRM,a0        ;save screen as COLOUR & DUMP
  1810.     lea.l    sc_ViewPort(a0),a0
  1811.     move.l    vp_ColorMap(a0),a0    
  1812.     moveq.l    #0,d3
  1813.     move.w    cm_Count(a0),d3            
  1814.     add.w    d3,d3
  1815.     move.l    cm_ColorTable(a0),d2
  1816.     move.l    d7,d1
  1817.     CALLDOS    Write
  1818.     cmp.l    d3,d0
  1819.     bne    .DiskError
  1820. .SaveDump    move.l    BILDSCHIRM,a0
  1821.     lea.l    sc_BitMap(a0),a0
  1822.     moveq.l    #0,d4
  1823.     move.b    bm_Depth(a0),d4
  1824.     subq.l    #1,d4
  1825.     moveq.l    #0,d5
  1826.     move.w    bm_BytesPerRow(a0),d5
  1827.     mulu    bm_Rows(a0),d5
  1828.  
  1829.     lea.l    bm_Planes(a0),a4
  1830. .L1    move.l    (a4)+,d2
  1831.     move.l    d5,d3
  1832.     move.l    d7,d1
  1833.     CALLDOS    Write
  1834.     cmp.l    d5,d0    
  1835.     bne    .DiskError
  1836.     dbra    d4,.L1
  1837.     bra.s    .L2
  1838. .DiskError    move.l    ScreenPtr1,a0    
  1839.     CALLINT    DisplayBeep
  1840. .L2    move.l    d7,d1
  1841.     CALLDOS    Close
  1842.     bra    wait
  1843. .Error    move.l    ScreenPtr1,a0    
  1844.     CALLINT    DisplayBeep
  1845.     bra    wait
  1846.  
  1847. FileReq    dc.l    0
  1848.     dc.l    File
  1849.     dc.l    Dir
  1850.     dc.l    0
  1851.     dc.b    0,0
  1852.     dc.l    0,0
  1853.  
  1854. SaveText1    dc.b    "Save Screen As IFF                     ",0
  1855.     even
  1856. SaveText2    dc.b    "Save Screen As DUMP                    ",0
  1857.     even
  1858. SaveText3    dc.b    "Save Screen As COLOUR & DUMP           ",0
  1859.     even
  1860. File    ds.b    34
  1861.     even
  1862. Dir    ds.b    34
  1863.     even
  1864.  
  1865. SPic_File        dc.l    0
  1866. SPic_BMHD        dc.l    Header    
  1867. SPic_BitMap        dc.l    0        
  1868. SPic_Mask        dc.l    0
  1869. SPic_Colortable    dc.l    0
  1870. SPic_Chunks        dc.l    0    
  1871. SPic_ChunkSize        dc.l    0
  1872. SPic_ViewMode        dc.l    V_HIRES    
  1873. SPic_SelectPlanes    dc.l    -1    
  1874. SPic_Flags        dc.l    1
  1875. SPic_Buffer        ds.b    200
  1876. SPic_PackerBuffer    ds.b    200
  1877. SPic_BMwidth        dc.l    0    
  1878. SPic_BytesPerRow    dc.l    0
  1879. SPic_StartRow        dc.l    0
  1880. SPic_EndRow        dc.l    0
  1881. SPic_SkipBytes        dc.l    0
  1882. SPic_Shift        dc.l    0
  1883. SPic_BodyPos        dc.l    0
  1884. SPic_FileHandle    dc.l    0    
  1885. SPic_A6        dc.l    0
  1886. SPic_PlaneBuffer    ds.l    10
  1887.  
  1888.  
  1889. Header    dc.w    80,3
  1890.     dc.w    0,0
  1891.     dc.b    1,0,1,0
  1892.     dc.w    0
  1893.     dc.b    1,1
  1894.     dc.w    640,256
  1895.  
  1896.  
  1897. SaveIFF    move.l    d0,SPic_File        ; save as IFF pic
  1898.     move.l    BILDSCHIRM,a0
  1899.     move.l    sc_Width(a0),Header
  1900.     move.l    sc_Width(a0),Header+16
  1901.     clr.l    Header+4
  1902. SaveWind    lea.l    sc_BitMap(a0),a0
  1903.     move.l    a0,SPic_BitMap
  1904.     move.b    bm_Depth(a0),Header+8
  1905.     move.l    BILDSCHIRM,a0
  1906.     lea.l    sc_ViewPort(a0),a0
  1907.     moveq.l    #0,d0
  1908.     move.w    vp_Modes(a0),d0
  1909.     and.w    #%1000100010000100,d0
  1910.     move.l    d0,SPic_ViewMode
  1911.     move.l    vp_ColorMap(a0),a0    
  1912.     moveq.l    #0,d3
  1913.     move.w    cm_Count(a0),d3            
  1914.     add.w    d3,d3
  1915.     move.l    cm_ColorTable(a0),SPic_Colortable
  1916.     bsr.s    .Save
  1917.     jmp    wait    
  1918.  
  1919.     
  1920. .Save    move.l    a6,SPic_A6
  1921.  
  1922.     move.l    SPic_BitMap,a0        ; verify sizes
  1923.     move.l    SPic_BMHD,a1
  1924.     moveq.l    #0,d0
  1925.     move.w    bm_BytesPerRow(a0),d0    
  1926.     move.l    d0,SPic_BMwidth        ;
  1927.     lsl.w    #3,d0            ; width of bitmap
  1928.     move.w    (a1),d1
  1929.     add.w    4(a1),d1            ; IFF_width + IFF_offsetX 
  1930.     cmp.w    d0,d1
  1931.     bhi    .SizeError
  1932.     move.w    bm_Rows(a0),d0            ; height of bitmap    
  1933.     move.w    2(a1),d1            ; IFF_heigth + IFF_offsetY
  1934.     add.w    6(a1),d1
  1935.     cmp.w    d0,d1
  1936.     bhi    .SizeError
  1937.  
  1938.     moveq.l    #0,d0            ; calculate ...
  1939.     move.w    (a1),d0             ; bytes of IFF_width ( word alligned)
  1940.     add.w    #15,d0
  1941.     lsr.l    #3,d0        
  1942.     bclr    #0,d0
  1943.     move.l    d0,SPic_BytesPerRow
  1944.     moveq.l    #0,d0
  1945.     move.w    6(a1),d0
  1946.     move.l    d0,SPic_StartRow        ; start at row
  1947.     moveq.l    #0,d0
  1948.     move.w    4(a1),d0
  1949.     and.l    #15,d0
  1950.     move.l    d0,SPic_Shift            ; how often should I move bits to the left
  1951.     moveq.l    #0,d0
  1952.     move.w    4(a1),d0
  1953.     lsr.w    #3,d0
  1954.     bclr    #0,d0
  1955.     move.l    d0,SPic_SkipBytes        ; how many bytes should I skip per row
  1956.  
  1957.  
  1958.     moveq.l    #0,d0
  1959.     move.w    2(a1),d0
  1960.     add.w    6(a1),d0
  1961.     move.l    d0,SPic_EndRow            ; stop at row
  1962.  
  1963.  
  1964.     moveq.l    #0,d0
  1965.     move.b    8(a1),d0    
  1966.     subq.l    #1,d0
  1967.     lea.l    bm_Planes(a0),a2
  1968.     lea.l    SPic_PlaneBuffer,a3
  1969. .K1    move.l    (a2)+,(a3)+
  1970.     dbra    d0,.K1
  1971.     clr.l    (a3)+
  1972.  
  1973.     move.l    SPic_File,d1
  1974.     move.l    #MODE_NEWFILE,d2
  1975.     CALLDOS    Open
  1976.     tst.l    d0
  1977.     beq    .L1
  1978.     move.l    d0,SPic_FileHandle
  1979.     CALLEXEC    Forbid
  1980.     move.l    SPic_FileHandle,d1
  1981.     move.l    #.FORM,d2        ; write IFF File Header
  1982.     move.l    #20,d3
  1983.     CALLDOS    Write
  1984.     cmp.l    #20,d0
  1985.     bne    .WriteError
  1986.     
  1987.  
  1988.     move.l    SPic_BMHD,a0    ; write BMHD
  1989.     move.l    a0,d2
  1990.     move.l    #20,d3
  1991.     move.l    SPic_FileHandle,d1
  1992.     CALLDOS    Write
  1993.     cmp.l    #20,d0
  1994.     bne    .WriteError
  1995.  
  1996.     lea.l    SPic_Buffer,a0    ; write CMAP
  1997.     move.l    a0,d6
  1998.     move.l    SPic_BMHD,a1    
  1999.     moveq.l    #0,d0        ; number of colours (2^depth)
  2000.     move.b    8(a1),d0
  2001.     moveq.l    #0,d1
  2002.     bset    d0,d1
  2003.     move.l    #"CMAP",(a0)+
  2004.     move.l    d1,d0
  2005.     mulu    #3,d0
  2006.     move.l    d0,d5
  2007.     move.l    d0,(a0)+
  2008.     subq.l    #1,d1
  2009.     move.l    SPic_Colortable,a1    
  2010. .L2    move.w    (a1)+,d2        ; copy colours into buffer
  2011.     move.w    d2,d3
  2012.     move.w    d2,d4
  2013.     lsr.w    #4,d2
  2014.     lsl.w    #4,d3
  2015.     and.w    #$f0,d2
  2016.     and.w    #$f0,d3
  2017.     and.w    #$f0,d4
  2018.     move.b    d2,(a0)+
  2019.     move.b    d4,(a0)+
  2020.     move.b    d3,(a0)+
  2021.     dbra    d0,.L2
  2022.     move.l    d6,d2
  2023.     move.l    d5,d3
  2024.     add.l    #8,d3
  2025.     move.l    SPic_FileHandle,d1
  2026.     CALLDOS    Write
  2027.     cmp.l    d3,d0
  2028.     bne    .WriteError
  2029.  
  2030.     lea.l    SPic_Buffer,a0        ; write CAMG
  2031.     move.l    a0,d2
  2032.     move.l    #"CAMG",(a0)+
  2033.     move.l    #4,(a0)+
  2034.     move.l    SPic_ViewMode,(a0)
  2035.     move.l    #12,d3
  2036.     move.l    SPic_FileHandle,d1
  2037.     CALLDOS    Write
  2038.     cmp.l    #12,d0
  2039.     bne    .WriteError
  2040.  
  2041.     move.l    SPic_Chunks,d2        ; write additional chunks
  2042.     move.l    SPic_ChunkSize,d3
  2043.     tst.l    d2
  2044.     beq.s    .L3
  2045.     tst.l    d3
  2046.     beq.s    .L3
  2047.     move.l    SPic_FileHandle,d1
  2048.     CALLDOS    Write
  2049.     move.l    SPic_ChunkSize,d1
  2050.     cmp.l    d1,d0
  2051.     bne    .WriteError
  2052.  
  2053.  
  2054. .L3    move.l    #.BODY,d2            ; write BODY
  2055.     moveq.l    #8,d3        
  2056.     move.l    SPic_FileHandle,d1
  2057.     CALLDOS    Write
  2058.     cmp.l    #8,d0
  2059.     bne    .WriteError
  2060.  
  2061.     move.l    SPic_FileHandle,d1    ; we'll write the chunk size later...    
  2062.     moveq.l    #OFFSET_CURRENT,d3
  2063.     moveq.l    #0,d2
  2064.     CALLDOS    Seek
  2065.     move.l    d0,SPic_BodyPos
  2066.  
  2067.     move.l    SPic_StartRow,d7    ; current row = d7
  2068.     subq.l    #1,d7    
  2069. .U4    addq.l    #1,d7
  2070. .U1    cmp.l    SPic_EndRow,d7        ; last row ????
  2071.     beq    .Q1
  2072.     lea.l    SPic_PlaneBuffer,a4    ; get pointer to bitplane
  2073. .U2    move.l    (a4)+,a0        
  2074.     cmp.l    #0,a0        ; last bitplane ????
  2075.     beq    .U4
  2076.     move.l    SPic_BMwidth,d0    ; offset
  2077.     mulu    d7,d0
  2078.     add.l    d0,a0
  2079.     lea.l    SPic_Buffer,a1        ; copy row to buffer
  2080.     move.l    a0,d2
  2081.     move.l    SPic_BMwidth,d0
  2082.     subq.l    #1,d0
  2083. .U3    move.b    (a0)+,(a1)+
  2084.     dbra    d0,.U3
  2085.     add.l    SPic_SkipBytes,d2    ; skip some bytes
  2086.  
  2087.     move.l    SPic_Shift,d4        ; shift bits to the left
  2088.     tst.l    d0
  2089.     beq    .U5
  2090.     move.l    d2,a0
  2091.     move.l    SPic_BytesPerRow,d0
  2092.     addq.l    #1,d0        ; if you save byte alligned
  2093.     lsr.w    #1,d0
  2094.     subq.l    #1,d0
  2095. .U6    move.w    (a0),d1        ; copy two words to d1
  2096.     swap    d1
  2097.     move.w    2(a0),d1
  2098.     lsl.l    d4,d1        ; now move bits of 2nd word into the 1st word
  2099.     swap    d1
  2100.     move.w    d1,(a0)+        ; copy 1st word back to buffer 
  2101.     dbra    d0,.U6
  2102.  
  2103. .U5    move.l    SPic_BytesPerRow,d3
  2104.     move.l    SPic_BMHD,a0
  2105.     cmp.b    #1,10(a0)
  2106.     bne    .U7
  2107.     movem.l    d4-d7/a0-a6,-(sp)
  2108.     bsr    Packer
  2109.     movem.l    (sp)+,d4-d7/a0-a6
  2110.  
  2111. .U7    move.l    SPic_FileHandle,d1    ; write row to file
  2112.     CALLDOS    Write
  2113.     cmp.l    d3,d0
  2114.     bne    .WriteError
  2115.     bra    .U2        ; next bitplane
  2116.  
  2117. .Q1    move.l    SPic_FileHandle,d1    ; get file size
  2118.     moveq.l    #OFFSET_CURRENT,d3
  2119.     moveq.l    #0,d2
  2120.     CALLDOS    Seek
  2121.     move.l    d0,d7
  2122.     sub.l    SPic_BodyPos,d0
  2123.     move.l    d0,.BODY+4
  2124.  
  2125.     move.l    SPic_FileHandle,d1    ; write BODY size
  2126.     moveq.l    #OFFSET_BEGINNING,d3
  2127.     move.l    SPic_BodyPos,d2
  2128.     subq.l    #4,d2
  2129.     CALLDOS    Seek
  2130.     
  2131.     move.l    #.BODY+4,d2
  2132.     moveq.l    #4,d3        
  2133.     move.l    SPic_FileHandle,d1
  2134.     CALLDOS    Write
  2135.     cmp.l    #4,d0
  2136.     bne    .WriteError
  2137.  
  2138.     subq.l    #8,d7
  2139.     move.l    d7,.FORM+4
  2140.     move.l    SPic_FileHandle,d1    ; write FORM size
  2141.     moveq.l    #OFFSET_BEGINNING,d3
  2142.     moveq.l    #4,d2
  2143.     CALLDOS    Seek
  2144.     
  2145.     move.l    #.FORM+4,d2
  2146.     moveq.l    #4,d3        
  2147.     move.l    SPic_FileHandle,d1
  2148.     CALLDOS    Write
  2149.     cmp.l    #4,d0
  2150.     bne    .WriteError
  2151.  
  2152.     move.l    SPic_FileHandle,d1
  2153.     CALLDOS    Close
  2154.     CALLEXEC    Permit
  2155.     moveq.l    #0,d0
  2156.     rts
  2157. .L1    
  2158. .SizeError    move.l    ScreenPtr1,a0    
  2159.     CALLINT    DisplayBeep
  2160.     moveq.l    #-1,d0
  2161.     rts
  2162. .WriteError    move.l    SPic_FileHandle,d1
  2163.     CALLDOS    Close    
  2164.     CALLEXEC    Permit
  2165.     move.l    SPic_File,d1
  2166.     CALLDOS    DeleteFile
  2167.     move.l    ScreenPtr1,a0    
  2168.     CALLINT    DisplayBeep
  2169.     moveq.l    #-1,d0
  2170.     rts
  2171.         
  2172.  
  2173.  
  2174.  
  2175. .FORM    dc.b    "FORM"
  2176.     dc.l    0
  2177.     dc.b    "ILBM"
  2178.     dc.b    "BMHD"
  2179.     dc.l    20
  2180. .BODY    dc.b    "BODY"
  2181.     dc.l    0
  2182.     
  2183.  
  2184.     
  2185.     
  2186.  
  2187. Packer    lea.l    SPic_PackerBuffer,a0    ; a0 ^buffer
  2188.     move.l    d2,a1        ; a1 ^row
  2189.     move.l    a1,a2        
  2190.     add.l    d3,a2        ; a2 ^ end of row        
  2191.     move.l    a1,a4
  2192.     
  2193. .P0    cmp.l    a2,a1
  2194.     beq    .Pexit
  2195.     bhi    .Pexit
  2196.     moveq.l    #-1,d5        ; d5 = counter
  2197. .P1    moveq.l    #0,d0        ; wait until two identical bytes  appear
  2198.     addq.l    #1,d5
  2199.     move.b    (a1,d5),d0        ; compare
  2200.     move.l    a1,d1
  2201.     add.l    d5,d1
  2202. *    addq.l    #1,d1
  2203.     cmp.l    a2,d1        ; end of row ????
  2204.     beq    .P5
  2205.     cmp.b    1(a1,d5),d0
  2206.     bne    .P1
  2207. .P5    tst.l    d5        ; are there bytes between two parts of identical bytes
  2208.     beq    .P2
  2209. .P3    subq.l    #1,d5        ; code = n-1
  2210.     move.b    d5,(a0)+
  2211. .P4    move.b    (a1)+,(a0)+        ; copy bytes
  2212.     dbra    d5,.P4
  2213.     bra.s    .P0
  2214.  
  2215. .P2    moveq.l    #-1,d4        ; pack it !
  2216. .P6    addq.l    #1,d4
  2217.     cmp.l    a2,a1
  2218.     beq    .P7    
  2219.     cmp.b    (a1)+,d0
  2220.     beq    .P6
  2221.     tst.b    -(a1)
  2222. .P7    move.l    #257,d1        ; code = 257-n
  2223.     sub.l    d4,d1
  2224.     move.b    d1,(a0)+
  2225.     move.b    d0,(a0)+
  2226.     bra    .P0
  2227. .Pexit    move.l    #SPic_PackerBuffer,d2
  2228.     move.l    a0,d3
  2229.     sub.l    d2,d3
  2230.     btst    #0,d3
  2231.     beq    .P10
  2232.     move.b    #128,(a0)+
  2233.     addq.l    #1,d3
  2234. .P10    rts
  2235.  
  2236.     
  2237.  
  2238. SWindow    dc.b    "Save Window As IFF                      ",0
  2239.  
  2240. SaveWindow    tst.l    FENSTER
  2241.     beq    Error
  2242.     lea.l    FileReq(pc),a0    
  2243.     move.l    #SWindow,(a0)
  2244.     move.l    _ARPBase,a6
  2245.     move.l    Window1,12(a0)
  2246.     jsr    -294(a6)        ; file requester
  2247.     tst.l    d0
  2248.     beq    wait    
  2249.     move.l    d0,d6
  2250.     move.l    #Dir,d1
  2251.     moveq.l    #ACCESS_READ,d2
  2252.     CALLDOS    Lock
  2253.     tst.l    d0
  2254.     beq    .O1
  2255.     move.l    d0,d1
  2256.     CALLDOS    CurrentDir        ; set current dir
  2257. .O1    move.l    d6,d0
  2258.     move.l    d0,SPic_File        ; save as IFF pic
  2259.     move.l    FENSTER,a0
  2260.     CALLINT    WindowToFront
  2261.     move.l    FENSTER,a0
  2262.     CALLINT    ActivateWindow
  2263.     move.l    BILDSCHIRM,a0
  2264.     move.l    FENSTER,a1
  2265.     move.l    wd_Width(a1),Header
  2266.     move.l    wd_LeftEdge(a1),Header+4
  2267.     move.l    sc_Width(a0),Header+16
  2268.     bra    SaveWind
  2269.  
  2270.  
  2271.  
  2272. ScreenBACK    move.l    BILDSCHIRM,a0        ; move screen to back
  2273.     CALLINT    ScreenToBack
  2274.     jmp    wait
  2275. ScreenFRONT    move.l    BILDSCHIRM,a0        ; move screen to front
  2276.     CALLINT    ScreenToFront
  2277.     jmp    QUIT        ; and exit fenster screen
  2278.  
  2279.  
  2280. QUIT2    move.l    ScreenPtr1,a0
  2281.     CALLINT    CloseScreen
  2282.  
  2283. ende    move.l    #RECOVERY_ALERT,d0    ; error message
  2284.     move.l    #30,d1
  2285.     lea.l    ErrorText,a0
  2286.     CALLINT    DisplayAlert
  2287.     moveq.l    #0,d0
  2288.     rts
  2289. ErrorText    dc.w    60
  2290.     dc.b    17
  2291.     dc.b    "FENSTER  :   ERROR !?!    I cannot open the screen / window !"
  2292.     dc.b     0,0
  2293.  
  2294. SUB    CALLEXEC    Forbid        ; sub Bitplane
  2295.     move.l    BILDSCHIRM,a0
  2296.     lea.l    sc_ViewPort(a0),a1        
  2297.     move.w    vp_Modes(a1),d0
  2298.     and.l    #$800,d0        ; HAM ?
  2299.     bne    SUB1
  2300.     lea.l    sc_BitMap(a0),a0
  2301.     moveq.l    #0,d2
  2302.     move.b    bm_Depth(a0),d2            
  2303.     cmp.b    #1,d2        ; depth =1 ?
  2304.     bls    SUB1
  2305.     sub.b    #1,bm_Depth(a0)
  2306.     subq    #1,d2
  2307.     lsl.l    #2,d2
  2308.     add.l    #bm_Planes,d2
  2309.     moveq.l    #0,d0
  2310.     moveq.l    #0,d1
  2311.     move.w    bm_BytesPerRow(a0),d0
  2312.     lsl.l    #3,d0
  2313.     move.w    bm_Rows(a0),d1
  2314.     move.l    (a0,d2),a0
  2315.     CALLGRAF    FreeRaster        ; free memory
  2316.     move.l    BILDSCHIRM,a0
  2317.     lea.l    sc_ViewPort(a0),a1
  2318.     lea.l    sc_BitMap(a0),a0
  2319.     cmp.b    #5,bm_Depth(a0)
  2320.     bne    SUB2
  2321.     and.w    #$ffff-$80,vp_Modes(a1)    ; clear EHB flag !
  2322. SUB2    CALLINT    RemakeDisplay
  2323.     CALLEXEC    Permit
  2324.     bra    NewDepth
  2325. SUB1    CALLEXEC    Permit        ; cannot sub bitplane
  2326.     sub.l    a0,a0
  2327.     CALLINT    DisplayBeep
  2328.     bra    wait
  2329.  
  2330. ADD    CALLEXEC    Forbid        ; add bitplane
  2331.     move.l    BILDSCHIRM,a0
  2332.     lea.l    sc_BitMap(a0),a0
  2333.     moveq.l    #0,d2
  2334.     move.b    bm_Depth(a0),d2            
  2335.     cmp.b    #5,d2        ; depth = 6 ?
  2336.     bhi    ADD1
  2337.     move.l    BILDSCHIRM,a1
  2338.     lea.l    sc_ViewPort(a1),a1
  2339.     move.w    vp_Modes(a1),d0
  2340.     and.l    #$8000,d0        ; HIRES (x=640) ?
  2341.     beq    ADD2
  2342.     move.b    bm_Depth(a0),d2            
  2343.     cmp.b    #3,d2
  2344.     bhi    ADD1
  2345. ADD2    moveq.l    #0,d0
  2346.     moveq.l    #0,d1
  2347.     move.w    bm_BytesPerRow(a0),d0
  2348.     lsl.l    #3,d0
  2349.     move.w    bm_Rows(a0),d1
  2350.     CALLGRAF    AllocRaster        ; get memory ?
  2351.     tst.l    d0
  2352.     beq    ADD1
  2353.     move.l    BILDSCHIRM,a0
  2354.     lea.l    sc_BitMap(a0),a0
  2355.     moveq.l    #0,d2
  2356.     move.b    bm_Depth(a0),d2
  2357.     add.b    #1,bm_Depth(a0)
  2358.     lsl.l    #2,d2
  2359.     add.l    #bm_Planes,d2
  2360.     move.l    d0,(a0,d2)
  2361.     move.l    d0,a1
  2362.     move.l    (a0),d0
  2363.     swap    d0
  2364.     moveq.l    #3,d1
  2365.     CALLGRAF    BltClear        ; clear bitplane
  2366.  
  2367.     move.l    BILDSCHIRM,a0
  2368.     lea.l    sc_BitMap(a0),a0
  2369.     cmp.b    #6,bm_Depth(a0)
  2370.     bne    ADD3
  2371.     move.l    BILDSCHIRM,a1
  2372.     lea.l    sc_ViewPort(a1),a1
  2373.     or.w    #$80,vp_Modes(a1)    ; depth =6 => set EHB flag !
  2374. ADD3    CALLINT    RemakeDisplay
  2375.     CALLEXEC    Permit
  2376.     bra    NewDepth
  2377. ADD1    CALLEXEC    Permit        ; cannot add bitplane
  2378.     sub.l    a0,a0
  2379.     CALLINT    DisplayBeep
  2380.     bra    wait
  2381.  
  2382. WindowPointer set Window1
  2383.  
  2384. NewDepth    SETAPEN    #0            ; show new
  2385.     RECTFILL    #10+184+(31*8),#19-6,#10+1+184+(32*8),#19+1
  2386.     move.l    BILDSCHIRM,a5            ; depth
  2387.     lea.l    sc_BitMap(a5),a0
  2388.     move.b    bm_Depth(a0),d0
  2389.     add.b    #"0",d0
  2390.     move.b    d0,Zeile+63-32    
  2391.     SETAPEN    #2
  2392.     move.l    Window1,a1
  2393.     move.l    wd_RPort(a1),a1
  2394.     move.l    #10+1+184+(31*8),d0
  2395.     move.l    #19+1,d1
  2396.     CALLGRAF    Move
  2397.     lea.l    Zeile+31,a0
  2398.     move.l    Window1,a1
  2399.     move.l    wd_RPort(a1),a1
  2400.     moveq.l    #1,d0
  2401.     CALLGRAF    Text
  2402.     SETAPEN    #1
  2403.     move.l    Window1,a1
  2404.     move.l    wd_RPort(a1),a1
  2405.     move.l    #10+184+(31*8),d0
  2406.     move.l    #19,d1
  2407.     CALLGRAF    Move
  2408.     lea.l    Zeile+31,a0
  2409.     move.l    Window1,a1
  2410.     move.l    wd_RPort(a1),a1
  2411.     moveq.l    #1,d0
  2412.     CALLGRAF    Text
  2413.     jmp    wait
  2414.  
  2415. PrintMode    dc.b    0
  2416.     even
  2417. Windowdef8    dc.w    635-174,50,174,100
  2418.     dc.b    -1,-1
  2419.     dc.l    GADGETUP
  2420.     dc.l    WINDOWDRAG!ACTIVATE!SMART_REFRESH
  2421.     dc.l    Gadget_8_1
  2422.     dc.l    0
  2423.     dc.l    W8_Title
  2424.     dc.l    0,0
  2425.     dc.w    0,0,0,0,CUSTOMSCREEN
  2426. W8_Title    dc.b    "    Print Window     ",0
  2427.     even
  2428. Gadget_8_1    AUTOGADGET     10,20,154,12,3,1,<"Page Size">,1,Gadget_8_2
  2429.     even
  2430. Gadget_8_2    AUTOGADGET     10,40,154,12,3,1,<"Window Size">,3,Gadget_8_3
  2431.     even
  2432. Gadget_8_3    AUTOGADGET     10,60,154,12,3,1,<"Change Colours">,0,Gadget_8_4
  2433.     even
  2434. Gadget_8_4    AUTOGADGET     10,80,154,12,3,1,<"No - forget it !">,0,0
  2435.     even
  2436.  
  2437. Windowdef10    dc.w    5,50,174,100
  2438.     dc.b    -1,-1
  2439.     dc.l    GADGETUP
  2440.     dc.l    WINDOWDRAG!ACTIVATE!SMART_REFRESH
  2441.     dc.l    Gadget_10_1
  2442.     dc.l    0
  2443.     dc.l    W10_Title
  2444.     dc.l    0,0
  2445.     dc.w    0,0,0,0,CUSTOMSCREEN
  2446. W10_Title    dc.b    "    Print Screen      ",0
  2447.     even
  2448. Gadget_10_1    AUTOGADGET     10,20,154,12,3,1,<"Page Size">,0,Gadget_10_2
  2449.     even
  2450. Gadget_10_2    AUTOGADGET     10,40,154,12,3,1,<"Screen Size">,2,Gadget_8_3
  2451.     even
  2452.  
  2453.  
  2454. PrintWindow    move.b    #1,PrintMode
  2455.     lea.l    Gadget_8_3(pc),a0
  2456.     move.w    #TOGGLESELECT,gg_Activation(a0)
  2457.     lea.l    Windowdef8(pc),a0
  2458.     move.l    ScreenPtr1,nw_Screen(a0)    
  2459.     CALLINT    OpenWindow
  2460.     tst.l    d0
  2461.     beq    .PW
  2462.     move.l    d0,Window2
  2463.  
  2464. WindowPointer set Window2
  2465.  
  2466.     SETAPEN    #2
  2467.     RECTFILL    #2,#10,#171,#98
  2468.     lea.l    Gadget_8_1,a0
  2469.     move.l    Window2,a1
  2470.     sub.l    a2,a2
  2471.     CALLINT    RefreshGadgets
  2472.     move.l    Window2,a0        
  2473.     move.l    wd_UserPort(a0),a0
  2474.     move.l    a0,a5
  2475.     CALLEXEC    WaitPort        
  2476.     move.l    a5,a0
  2477.     CALLEXEC    GetMsg        ; get message
  2478.     move.l    d0,a1    
  2479.     move.l    im_IAddress(a1),a4
  2480.     CALLEXEC     ReplyMsg        ; reply message        
  2481.     move.l    Window2,a0
  2482.     CALLINT    CloseWindow
  2483.     move.b    gg_GadgetID+1(a4),PrintMode
  2484.     tst.b    PrintMode
  2485.     beq    wait
  2486. .PW    move.l    FENSTER,a0
  2487.     CALLINT    ActivateWindow
  2488.     bra    PS1
  2489.  
  2490.  
  2491. PrintScreen    clr.b    PrintMode        ; print screen    
  2492.     lea.l    Gadget_8_3(pc),a0
  2493.     move.w    #TOGGLESELECT,gg_Activation(a0)
  2494.     lea.l    Windowdef10(pc),a0
  2495.     move.l    ScreenPtr1,nw_Screen(a0)    
  2496.     CALLINT    OpenWindow
  2497.     tst.l    d0
  2498.     beq    PS1
  2499.     move.l    d0,Window2
  2500.  
  2501. WindowPointer set Window2
  2502.  
  2503.     SETAPEN    #2
  2504.     RECTFILL    #2,#10,#171,#98
  2505.     lea.l    Gadget_10_1,a0
  2506.     move.l    Window2,a1
  2507.     sub.l    a2,a2
  2508.     CALLINT    RefreshGadgets
  2509.     move.l    Window2,a0        
  2510.     move.l    wd_UserPort(a0),a0
  2511.     move.l    a0,a5
  2512.     CALLEXEC    WaitPort        
  2513.     move.l    a5,a0
  2514.     CALLEXEC    GetMsg        ; get message
  2515.     move.l    d0,a1    
  2516.     move.l    im_IAddress(a1),a4
  2517.     CALLEXEC     ReplyMsg        ; reply message        
  2518.     move.l    Window2,a0
  2519.     CALLINT    CloseWindow
  2520.     move.b    gg_GadgetID+1(a4),PrintMode
  2521.     and.b    #$fe,PrintMode
  2522.     tst.b    PrintMode
  2523.     beq    wait
  2524.  
  2525. PS1    sub.l    a1,a1
  2526.     CALLEXEC    FindTask
  2527.     lea.l    Reply(pc),a1
  2528.     move.l    d0,$10(a1)
  2529.     CALLEXEC    AddPort
  2530.     lea    DevName(pc),a0
  2531.     lea.l    DevIO(pc),a1
  2532.     moveq.l    #0,d0    
  2533.     move.l    #iodrpr_SIZEOF,d1
  2534.     CALLEXEC    OpenDevice        ; open printer device
  2535.     tst.l    d0
  2536.     bne    .Error
  2537.  
  2538.     move.l    BILDSCHIRM,a1
  2539.     lea.l    DevIO(pc),a0
  2540.  
  2541.     lea.l    sc_RastPort(a1),a2
  2542.     move.l    a2,io_RastPort(a0)
  2543.     btst    #0,PrintMode
  2544.     beq.s    .P1
  2545.     move.l    FENSTER,a3
  2546.     move.l    wd_RPort(a3),io_RastPort(a0)
  2547.  
  2548. .P1    lea.l    sc_ViewPort(a1),a2
  2549.     move.l    vp_ColorMap(a2),a3
  2550.     move.l    a3,io_ColorMap(a0)
  2551.     move.l    cm_ColorTable(a3),a3
  2552.     move.l    (a3),PrintColors
  2553.     move.l    a3,ColorTable
  2554.  
  2555.     btst    #7,Gadget_8_3+gg_Flags+1    ; if selected set colours 0/1 to white/black
  2556.     beq    .P2
  2557.     move.l    #$0fff0000,(a3)    
  2558.  
  2559.  
  2560. .P2    moveq.l    #0,d0
  2561.     move.w    vp_Modes(a2),d0
  2562.     move.l    d0,io_Modes(a0)
  2563.     
  2564.     move.w    #0,io_SrcX(a0)
  2565.     move.w    #0,io_SrcY(a0)
  2566.     move.w    sc_Width(a1),io_SrcWidth(a0)
  2567.     move.w    sc_Height(a1),io_SrcHeight(a0)
  2568.     moveq.l    #0,d0
  2569.     move.l    d0,io_DestCols(a0)
  2570.     move.l    d0,io_DestRows(a0)
  2571.     btst    #0,PrintMode
  2572.     beq.s    .P3
  2573.     move.l    FENSTER,a3
  2574.     move.w    wd_Width(a3),io_SrcWidth(a0)
  2575.     move.w    wd_Height(a3),io_SrcHeight(a0)
  2576.  
  2577.  
  2578. .P3    btst    #1,PrintMode        ; use page size ?
  2579.     beq.s    .P5
  2580.     moveq.l    #0,d2
  2581.     moveq.l    #0,d3
  2582.     move.w    sc_Width(a3),d2
  2583.     move.w    sc_Height(a3),d3
  2584.     move.l    d2,io_DestCols(a0)    ; use pic size
  2585.     move.l    d3,io_DestRows(a0)
  2586.     btst    #0,PrintMode
  2587.     beq.s    .P5
  2588.     moveq.l    #0,d2
  2589.     moveq.l    #0,d3
  2590.     move.w    wd_Width(a3),d2
  2591.     move.w    wd_Height(a3),d3
  2592.     move.l    d2,io_DestCols(a0)    ; use pic size
  2593.     move.l    d3,io_DestRows(a0)
  2594.     
  2595. .P5    moveq.l    #0,d0
  2596.     move.w    d0,io_Special(a0)
  2597.     move.w    #PRD_DUMPRPORT,IO_COMMAND(a0)
  2598.     move.l    #Reply,14(a0)
  2599.     
  2600.     move.l    a0,a1
  2601.     CALLEXEC    DoIO
  2602.  
  2603.     move.l    ColorTable,a3        ; restore colours
  2604.     move.l    PrintColors,(a3)
  2605.     
  2606.     lea.l    DevIO(pc),a1
  2607.     move.b    IO_ERROR(a1),d0
  2608.     CALLEXEC    CloseDevice
  2609.     
  2610. .Error    lea.l    Reply(pc),a1
  2611.     CALLEXEC    RemPort
  2612.     bra    wait
  2613. DevName    dc.b    "printer.device",0
  2614. Reply    ds.l    8
  2615. DevIO    ds.b    iodrpr_SIZEOF
  2616.     even
  2617. PrintColors    dc.l    0
  2618. ColorTable    dc.l    0
  2619.  
  2620.  
  2621. ColReq    move.l    BILDSCHIRM,a0
  2622.     CALLINT    ScreenToFront
  2623.     move.l    BILDSCHIRM,a1        ; colour requester (color.library needed)
  2624.     sub.l    a0,a0
  2625.     move.l    _ColorBase,a6
  2626.     jsr    -30(a6)
  2627.     move.l    d0,d5
  2628.     move.l    ScreenPtr1,a0
  2629.     CALLINT    ScreenToFront
  2630.     tst.l    d5
  2631.     bmi    Error
  2632.     jmp    wait
  2633.  
  2634. TOP    move.l    BILDSCHIRM,a0        ; move screnen to left edge
  2635.     move.l    #-1000,d1
  2636.     move.l    #-1000,d0
  2637.     CALLINT    MoveScreen
  2638.     jmp    wait
  2639.     
  2640.  
  2641.  
  2642.  
  2643. Windowdef    dc.w    20,20,140,10
  2644.     dc.b    -1,-1
  2645.     dc.l    MENUPICK!CLOSEWINDOW
  2646.     dc.l    WINDOWDRAG!WINDOWCLOSE!ACTIVATE!SMART_REFRESH!WINDOWDEPTH
  2647.     dc.l    0
  2648.     dc.l    0
  2649.     dc.l    W_Title
  2650.     dc.l    0,0
  2651.     dc.w    0,0,0,0,WBENCHSCREEN
  2652. W_Title    dc.b    "Fenster      ",0
  2653.     even 
  2654. WindowPtr    dc.l    0
  2655.  
  2656. Init    lea.l    Windowdef,a0        ; create window on WB    
  2657.     CALLINT    OpenWindow
  2658.     tst.l    d0
  2659.     beq    ende
  2660.     move.l    d0,WindowPtr
  2661.  
  2662.  
  2663. .wait    move.l    WindowPtr,a0        ; wait .....
  2664.     move.l    wd_UserPort(a0),a0
  2665.     move.l    a0,a5
  2666.     CALLEXEC    WaitPort        
  2667.     move.l    a5,a0
  2668.     CALLEXEC    GetMsg        ; get message
  2669.     move.l    d0,a1    
  2670.     move.l    im_Class(a1),d4    ; get data
  2671.     CALLEXEC     ReplyMsg        ; reply message        
  2672.     cmp.l    #MENUPICK,d4        ; right mouse button pressed ?
  2673.     beq    .FENSTER
  2674.     move.l    WindowPtr,a0
  2675.     CALLINT    CloseWindow
  2676.     rts
  2677. .FENSTER    jsr    Start        ; open FENSTER
  2678.     bra    .wait
  2679.  
  2680.  
  2681.  
  2682.